chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL 8.0性能優(yōu)化實(shí)戰(zhàn)指南

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 2025-07-24 11:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

作為一名運(yùn)維工程師,MySQL數(shù)據(jù)庫優(yōu)化是我們?nèi)粘9ぷ髦凶罹咛魬?zhàn)性的任務(wù)之一。MySQL 8.0作為當(dāng)前主流版本,在性能、安全性和功能上都有了顯著提升,但如何充分發(fā)揮其潛力,仍需要我們掌握正確的優(yōu)化策略。

本文將分享我在生產(chǎn)環(huán)境中總結(jié)的20+條MySQL 8.0優(yōu)化建議,涵蓋配置調(diào)優(yōu)、索引優(yōu)化、查詢優(yōu)化、存儲引擎調(diào)優(yōu)等多個(gè)維度。每一條建議都經(jīng)過實(shí)戰(zhàn)驗(yàn)證,希望能幫助大家在數(shù)據(jù)庫性能優(yōu)化路上少走彎路。

硬件與系統(tǒng)層面優(yōu)化

1. 內(nèi)存配置優(yōu)化

# my.cnf 關(guān)鍵內(nèi)存參數(shù)
innodb_buffer_pool_size=8G  # 建議設(shè)置為物理內(nèi)存的70-80%
innodb_log_buffer_size=64M  # 日志緩沖區(qū)大小
query_cache_size=0     # MySQL 8.0已移除,確保關(guān)閉
tmp_table_size=256M     # 臨時(shí)表大小
max_heap_table_size=256M  # 內(nèi)存表最大大小

實(shí)戰(zhàn)經(jīng)驗(yàn):innodb_buffer_pool_size是最重要的參數(shù)之一。在16GB內(nèi)存的服務(wù)器上,我通常設(shè)置為12GB,這樣既保證了數(shù)據(jù)庫性能,又為操作系統(tǒng)留下了足夠空間。

2. I/O性能調(diào)優(yōu)

# I/O優(yōu)化配置
innodb_io_capacity=2000   # SSD建議2000-5000
innodb_io_capacity_max=4000 # 最大I/O容量
innodb_read_io_threads=8   # 讀I/O線程數(shù)
innodb_write_io_threads=8  # 寫I/O線程數(shù)
innodb_flush_method= O_DIRECT # 避免雙重緩沖

3. CPU優(yōu)化配置

# CPU相關(guān)優(yōu)化
innodb_thread_concurrency=0 # 讓InnoDB自動檢測
innodb_spin_wait_delay=6  # 自旋鎖等待時(shí)間
thread_cache_size=256    # 線程緩存大小

InnoDB存儲引擎優(yōu)化

4. 事務(wù)日志優(yōu)化

# 事務(wù)日志配置
innodb_log_file_size=2G    # 單個(gè)日志文件大小
innodb_log_files_in_group=2 # 日志文件組數(shù)量
innodb_flush_log_at_trx_commit=2# 性能與安全平衡

注意事項(xiàng):innodb_flush_log_at_trx_commit的不同值含義:

? 0:每秒刷新一次(性能最好,但可能丟失數(shù)據(jù))

? 1:每次事務(wù)提交都刷新(最安全,性能較差)

? 2:每次提交寫入OS緩存,每秒刷新到磁盤(推薦的平衡選擇)

5. 緩沖池優(yōu)化

# 緩沖池高級配置
innodb_buffer_pool_instances=8 # 多實(shí)例提高并發(fā)
innodb_old_blocks_pct=37    # 舊塊百分比
innodb_old_blocks_time=1000  # 舊塊停留時(shí)間
innodb_buffer_pool_dump_at_shutdown=ON
innodb_buffer_pool_load_at_startup=ON

6. 鎖優(yōu)化配置

# 鎖相關(guān)優(yōu)化
innodb_lock_wait_timeout=50  # 鎖等待超時(shí)時(shí)間
innodb_deadlock_detect=ON   # 死鎖檢測
innodb_print_all_deadlocks=ON # 記錄所有死鎖信息

查詢與索引優(yōu)化

7. 慢查詢?nèi)罩九渲?/p>

# 慢查詢優(yōu)化
slow_query_log=ON
slow_query_log_file= /var/log/mysql/slow.log
long_query_time=2       # 2秒以上記錄為慢查詢
log_queries_not_using_indexes=ON# 記錄未使用索引的查詢

8. 索引設(shè)計(jì)最佳實(shí)踐

-- 復(fù)合索引示例:遵循最左前綴原則
CREATEINDEX idx_user_time_statusONorders(user_id, create_time, status);

-- 覆蓋索引示例:避免回表查詢
CREATEINDEX idx_coverONproducts(category_id, price) INCLUDE (product_name);

-- 函數(shù)索引示例:MySQL 8.0新特性
CREATEINDEX idx_funcONusers((YEAR(birth_date)));

索引優(yōu)化技巧

? 單表索引數(shù)量控制在5個(gè)以內(nèi)

? 復(fù)合索引字段順序:選擇性高的字段在前

? 定期使用ANALYZE TABLE更新索引統(tǒng)計(jì)信息

9. 查詢優(yōu)化器配置

# 優(yōu)化器相關(guān)參數(shù)
optimizer_switch='index_merge_intersection=on,index_merge_sort_union=on'
optimizer_search_depth=62
optimizer_prune_level=1

連接與會話優(yōu)化

10. 連接池配置

# 連接相關(guān)優(yōu)化
max_connections=1000      # 最大連接數(shù)
max_connect_errors=100000   # 最大連接錯(cuò)誤數(shù)
interactive_timeout=300    # 交互超時(shí)時(shí)間
wait_timeout=300        # 等待超時(shí)時(shí)間
connect_timeout=10       # 連接超時(shí)時(shí)間

11. 表緩存優(yōu)化

# 表緩存配置
table_open_cache=4000     # 表緩存大小
table_definition_cache=2000  # 表定義緩存
open_files_limit=65535    # 打開文件限制

MySQL 8.0 新特性優(yōu)化

12. 不可見索引利用

-- 創(chuàng)建不可見索引用于測試
ALTER TABLEusersADDINDEX idx_email (email) INVISIBLE;

-- 測試完成后設(shè)置為可見
ALTER TABLEusersALTERINDEX idx_email VISIBLE;

13. 直方圖統(tǒng)計(jì)信息

-- 創(chuàng)建直方圖提高查詢優(yōu)化器準(zhǔn)確性
ANALYZETABLEordersUPDATEHISTOGRAMONuser_id, order_amountWITH100BUCKETS;

-- 查看直方圖信息
SELECT*FROMinformation_schema.COLUMN_STATISTICS;

14. CTE(公用表表達(dá)式)優(yōu)化

-- 使用遞歸CTE替代復(fù)雜的自連接
WITHRECURSIVEcategory_treeAS(
 SELECTid, name, parent_id,0aslevel
 FROMcategories
 WHEREparent_idISNULL
 UNIONALL
 SELECTc.id, c.name, c.parent_id, ct.level+1
 FROMcategories c
 JOINcategory_tree ctONc.parent_id=ct.id
)
SELECT*FROMcategory_treeORDERBYlevel, id;

15. 窗口函數(shù)性能優(yōu)化

-- 使用窗口函數(shù)替代子查詢
SELECT
  user_id,
  order_amount,
 ROW_NUMBER()OVER(PARTITIONBYuser_idORDERBYorder_amountDESC)asrank
FROMorders
WHERErank<=?3; ?-- 每個(gè)用戶的前3個(gè)最大訂單

安全與權(quán)限優(yōu)化

16. 用戶權(quán)限最小化

-- 創(chuàng)建專用應(yīng)用用戶,遵循最小權(quán)限原則
CREATEUSER'app_user'@'%'IDENTIFIEDBY'complex_password';
GRANTSELECT,INSERT,UPDATE,DELETEONmyapp.*TO'app_user'@'%';

-- 創(chuàng)建只讀用戶用于報(bào)表查詢
CREATEUSER'readonly'@'%'IDENTIFIEDBY'readonly_password';
GRANTSELECTONmyapp.*TO'readonly'@'%';

17. SSL/TLS加密配置

# SSL配置
require_secure_transport=ON
ssl_ca= /etc/mysql/ca.pem
ssl_cert= /etc/mysql/server-cert.pem
ssl_key= /etc/mysql/server-key.pem

監(jiān)控與診斷優(yōu)化

18. Performance Schema配置

# Performance Schema優(yōu)化
performance_schema=ON
performance-schema-instrument='statement/%=ON'
performance-schema-consumer-events-statements-current=ON
performance-schema-consumer-events-statements-history=ON

19. 關(guān)鍵監(jiān)控查詢

-- 查看當(dāng)前運(yùn)行的查詢
SELECT
  PROCESSLIST_ID,
  PROCESSLIST_USER,
  PROCESSLIST_HOST,
  PROCESSLIST_DB,
  PROCESSLIST_COMMAND,
  PROCESSLIST_TIME,
  PROCESSLIST_INFO
FROMperformance_schema.processlist
WHEREPROCESSLIST_COMMAND!='Sleep';

-- 查看表空間使用情況
SELECT
  TABLE_SCHEMA,
  ROUND(SUM(DATA_LENGTH+INDEX_LENGTH)/1024/1024,2)AS'DB Size in MB'
FROMinformation_schema.TABLES
GROUPBYTABLE_SCHEMA;

20. 慢查詢分析

# 使用mysqldumpslow分析慢查詢?nèi)罩?mysqldumpslow -s c -t 10 /var/log/mysql/slow.log # 按查詢次數(shù)排序
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log # 按查詢時(shí)間排序

備份與恢復(fù)優(yōu)化

21. 邏輯備份優(yōu)化

# 高性能備份腳本
mysqldump --single-transaction 
     --routines 
     --triggers 
     --all-databases 
     --master-data=2 
     --flush-logs 
     --hex-blob > backup_$(date+%Y%m%d).sql

22. 物理備份配置

# 使用XtraBackup進(jìn)行物理備份
xtrabackup --backup 
     --target-dir=/backup/mysql 
     --datadir=/var/lib/mysql 
     --parallel=4 
     --compress 
     --compress-threads=4

分區(qū)表優(yōu)化

23. 分區(qū)策略實(shí)現(xiàn)

-- 按時(shí)間分區(qū)示例
CREATE TABLEorders_partitioned (
  idINTAUTO_INCREMENT,
  user_idINT,
  order_dateDATE,
  amountDECIMAL(10,2),
 PRIMARY KEY(id, order_date)
)PARTITIONBYRANGE(YEAR(order_date)) (
 PARTITIONp2023VALUESLESS THAN (2024),
 PARTITIONp2024VALUESLESS THAN (2025),
 PARTITIONp2025VALUESLESS THAN (2026),
 PARTITIONp_futureVALUESLESS THAN MAXVALUE
);

-- 分區(qū)維護(hù)
ALTER TABLEorders_partitionedDROPPARTITIONp2022; -- 刪除舊分區(qū)
ALTER TABLEorders_partitionedADDPARTITION(PARTITIONp2026VALUESLESS THAN (2027)); -- 添加新分區(qū)

實(shí)戰(zhàn)性能測試

24. 基準(zhǔn)測試方案

# 使用sysbench進(jìn)行壓力測試
sysbench oltp_read_write 
  --mysql-host=localhost 
  --mysql-port=3306 
  --mysql-user=test
  --mysql-password=test
  --mysql-db=testdb 
  --tables=10 
  --table-size=100000 
  --threads=16 
  --time=300 
  --report-interval=10 
  prepare

sysbench oltp_read_write 
  --mysql-host=localhost 
  --mysql-port=3306 
  --mysql-user=test
  --mysql-password=test
  --mysql-db=testdb 
  --tables=10 
  --table-size=100000 
  --threads=16 
  --time=300 
  --report-interval=10 
  run

25. 定期優(yōu)化維護(hù)腳本

#!/bin/bash
# MySQL定期優(yōu)化腳本

# 1. 更新表統(tǒng)計(jì)信息
mysql -e"
SELECT CONCAT('ANALYZE TABLE ', table_schema, '.', table_name, ';')
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'performance_schema', 'mysql', 'sys')
"| grep -v CONCAT | mysql

# 2. 清理二進(jìn)制日志
mysql -e"PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"

# 3. 優(yōu)化表(謹(jǐn)慎使用)
# mysql -e "mysqlcheck --optimize --all-databases"

echo"MySQL optimization completed at$(date)"

總結(jié)與最佳實(shí)踐

性能優(yōu)化的黃金法則

1.監(jiān)控先行:建立完善的監(jiān)控體系,了解系統(tǒng)瓶頸

2.漸進(jìn)優(yōu)化:一次只調(diào)整一個(gè)參數(shù),觀察效果后再繼續(xù)

3.基準(zhǔn)測試:每次優(yōu)化都要有基準(zhǔn)對比

4.定期維護(hù):建立定期的優(yōu)化和清理機(jī)制

常見誤區(qū)避免

? 不要盲目增大innodb_buffer_pool_size到接近物理內(nèi)存

? 不要在生產(chǎn)環(huán)境直接執(zhí)行OPTIMIZE TABLE

? 不要忽視慢查詢?nèi)罩镜姆治?/p>

? 不要在高并發(fā)時(shí)段進(jìn)行大量數(shù)據(jù)操作

優(yōu)化效果評估

通過以上優(yōu)化,我們通??梢垣@得:

? 查詢響應(yīng)時(shí)間提升60-80%

? 并發(fā)處理能力提升50-70%

? 系統(tǒng)穩(wěn)定性顯著改善

? 資源利用率優(yōu)化30-50%

結(jié)語

MySQL 8.0的性能優(yōu)化是一個(gè)系統(tǒng)性工程,需要我們從硬件、系統(tǒng)、數(shù)據(jù)庫配置、應(yīng)用設(shè)計(jì)等多個(gè)層面綜合考慮。希望這25條優(yōu)化建議能為大家的數(shù)據(jù)庫性能提升提供實(shí)用指導(dǎo)。

記住,沒有銀彈,每個(gè)環(huán)境都有其特殊性,最重要的是要結(jié)合實(shí)際業(yè)務(wù)場景,通過監(jiān)控和測試來驗(yàn)證優(yōu)化效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4617

    瀏覽量

    88952
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3977

    瀏覽量

    67394
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    889

    瀏覽量

    28855

原文標(biāo)題:MySQL 8.0 性能優(yōu)化實(shí)戰(zhàn)指南:20+條黃金建議助你成為數(shù)據(jù)庫調(diào)優(yōu)高手

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    mysql的查詢優(yōu)化

    mysql查詢優(yōu)化
    發(fā)表于 03-12 11:06

    MySQL優(yōu)化之查詢性能優(yōu)化之查詢優(yōu)化器的局限性與提示

    MySQL優(yōu)化三:查詢性能優(yōu)化之查詢優(yōu)化器的局限性與提示
    發(fā)表于 06-02 06:34

    MySQL索引使用優(yōu)化和規(guī)范

    MySQL - 索引使用優(yōu)化和規(guī)范
    發(fā)表于 06-15 16:01

    MySql5.6性能優(yōu)化最佳實(shí)踐

    MySql5.6性能優(yōu)化最佳實(shí)踐
    發(fā)表于 09-08 08:47 ?13次下載
    <b class='flag-5'>MySql</b>5.6<b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>最佳實(shí)踐

    MySQL數(shù)據(jù)庫:理解MySQL性能優(yōu)化、優(yōu)化查詢

    最近一直在為大家更新MySQL相關(guān)學(xué)習(xí)內(nèi)容,可能有朋友不懂MySQL的重要性。在程序,語言,架構(gòu)更新?lián)Q代頻繁的今天,MySQL 恐怕是大家使用最多的存儲數(shù)據(jù)庫了。由于MySQL
    的頭像 發(fā)表于 07-02 17:18 ?3461次閱讀
    <b class='flag-5'>MySQL</b>數(shù)據(jù)庫:理解<b class='flag-5'>MySQL</b>的<b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>、<b class='flag-5'>優(yōu)化</b>查詢

    騰訊云打造MySQL 8.0全新引擎,進(jìn)一步加速客戶產(chǎn)業(yè)升級

    據(jù)介紹,騰訊云數(shù)據(jù)庫 MySQL 8.0的內(nèi)核可以百分百完全兼容主流MySQL分支。相比官方版本,無論是單機(jī)模式、異步模式還是同步模式下, MySQL
    的頭像 發(fā)表于 07-09 14:54 ?2692次閱讀

    MySQL 5.7與MySQL 8.0 性能對比

    背景 測試mysql5.7和mysql8.0分別在讀寫,選定,只寫模式下不同并發(fā)時(shí)的性能(tps,qps) 最早 測試使用版本為mysql5.7.22和
    的頭像 發(fā)表于 11-03 09:26 ?2.3w次閱讀
    <b class='flag-5'>MySQL</b> 5.7與<b class='flag-5'>MySQL</b> <b class='flag-5'>8.0</b> <b class='flag-5'>性能</b>對比

    你會從哪些維度進(jìn)行MySQL性能優(yōu)化?1

    你會從哪些維度進(jìn)行MySQL性能優(yōu)化?你會怎么回答? 所謂的性能優(yōu)化,一般針對的是MySQL
    的頭像 發(fā)表于 03-03 10:23 ?840次閱讀
    你會從哪些維度進(jìn)行<b class='flag-5'>MySQL</b><b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>?1

    你會從哪些維度進(jìn)行MySQL性能優(yōu)化?2

    你會從哪些維度進(jìn)行MySQL性能優(yōu)化?你會怎么回答? 所謂的性能優(yōu)化,一般針對的是MySQL
    的頭像 發(fā)表于 03-03 10:23 ?798次閱讀
    你會從哪些維度進(jìn)行<b class='flag-5'>MySQL</b><b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>?2

    關(guān)于MySQL8.0版本選型的小技巧

    MySQL 8.0 第一個(gè)GA(General Availability)版本(正式、可用于生產(chǎn)的版本)于2018/4/19發(fā)布至今已有3年。8.0是一個(gè)全新的版本,增加了數(shù)百項(xiàng)功能新特性,重構(gòu)了
    的頭像 發(fā)表于 03-29 13:45 ?1876次閱讀
    關(guān)于<b class='flag-5'>MySQL8.0</b>版本選型的小技巧

    請問mysql8.0不能在grant時(shí)創(chuàng)建用戶是什么原因?

    用習(xí)慣了MySQL5.7,當(dāng)在MySQL8.0里創(chuàng)建用戶時(shí),習(xí)慣性直接敲GRANT指令,結(jié)果報(bào)錯(cuò)了
    的頭像 發(fā)表于 08-11 10:16 ?3037次閱讀

    mysql8.0默認(rèn)字符集是什么

    MySQL 8.0 默認(rèn)字符集是 utf8mb4。 MySQL 8.0 是當(dāng)前最新的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由Oracle公司開發(fā)和維護(hù)。MySQ
    的頭像 發(fā)表于 11-16 14:48 ?2444次閱讀

    MySQL性能優(yōu)化方法

    MySQL 性能優(yōu)化是一項(xiàng)關(guān)鍵的任務(wù),可以提高數(shù)據(jù)庫的運(yùn)行速度和效率。以下是一些優(yōu)化方法,包括具體代碼和詳細(xì)優(yōu)化方案。
    的頭像 發(fā)表于 11-22 09:59 ?1170次閱讀

    GitHub底層數(shù)據(jù)庫無縫升級到MySQL 8.0的經(jīng)驗(yàn)

    GitHub 團(tuán)隊(duì)近日分享了他們將 GitHub.com 的底層數(shù)據(jù)庫無縫升級到 MySQL 8.0 的經(jīng)驗(yàn)。 據(jù)介紹,GitHub 使用 MySQL 來存儲大量關(guān)系數(shù)據(jù),因此在不影響網(wǎng)站服務(wù)級別
    的頭像 發(fā)表于 12-13 10:21 ?959次閱讀
    GitHub底層數(shù)據(jù)庫無縫升級到<b class='flag-5'>MySQL</b> <b class='flag-5'>8.0</b>的經(jīng)驗(yàn)

    MySQL慢查詢終極優(yōu)化指南

    作為一名在生產(chǎn)環(huán)境摸爬滾打多年的運(yùn)維工程師,我見過太多因?yàn)槁樵儗?dǎo)致的線上故障。今天分享一套經(jīng)過實(shí)戰(zhàn)檢驗(yàn)的MySQL慢查詢分析與索引優(yōu)化方法論,幫你徹底解決數(shù)據(jù)庫性能瓶頸。
    的頭像 發(fā)表于 08-13 15:55 ?547次閱讀