mysql8 优化_MySQL 8.0 优化
優化效果(從大到小):
硬件設備 -> MySQL數據庫 -> Linux操作系統 -> 表設計
—————————————————————————————————————-
1
硬件設備優化
提升硬件設備,例如使用SSD高速磁盤,CPU等。
—————————————————————————————————————-
2
MySQL數據庫配置優化
# 物理內存的50%~80%,這里為
innodb_buffer_pool_size=2000000000
# 雙1模式
# 按事物刷盤,刷日志
innodb_flush_log_at_trx_commit=1
# 提交1次事物刷1次,可以為n
sync_binlog=1
# 臟頁占innodb_buffer_pool_size的比例時,觸發刷臟頁到磁盤
# 25%~50%
innodb_max_dirty_pages_pct=30
# 后臺進程最大IO性能指標
# 默認200,如果SSD,調整為5000~20000
innodb_io_capacity=200
# 默認10M。防止高并發下,數據庫受影響
innodb_data_file_path=ibdata1:1024M:autoextend
# 默認2,單位s。慢查詢時間。建議0.1~0.5
long_qurey_time=0.3
# 8.0默認row。記錄格式,讓數據安全可靠
binlog_format=row
# 默認8小時。交互等待時間和非交互等待時間
# 建議300~500s,兩參數值必須一致,且同時修改
interactive_timeout=500
wait_timeout=500
# 過大,容易OOM(內存溢出)
# 調高該參數應降低interactive_timeout、wait_timeout的值
# 默認151
max_connections=200
# 過大,實例恢復時間長;過小,造成日志切換頻繁
# 默認50331648,50MB
innodb_log_file_size=50331648
# 全量日志建議關閉
# 默認關閉
general_log=0
—————————————————————————————————————-
3
Linux操作系統層面優化
cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
修改為deadline或noop,cfq,嚴重影響數據庫性能
文件系統采用xfs,其次是ext4,不用ext3
內核參數vm.swappiness,默認60;0表示不用swap,容易OOM;100表示使用swap,而不釋放內存
cat /proc/sys/vm/swappiness
無法修改,則編輯/etc/sysctl.conf,加入vm.swappiness的值
還有
vm.dirty_background_ratio:默認10,建議不超過10
vm.dirty_ratio:默認20,建議不超過20
—————————————————————————————————————-
4
表設計及其他優化
1.庫名、表名、字段名小寫,用“_”分隔。
2.使用自增列int或bigint作為主鍵
3.ipv4使用int存儲,inet_aton、inet_ntoa
4.sex、status使用tinyint
5.業務表切忌出現大類型字段,sql避免or子句
6.只需獲取必要字段時,避免使用select *,還可能用到覆蓋索引
7.建立索引在選擇性高的字段上,不要在sex、status上建
8.單表索引數量不要超過4~5個
9.字段默認加上not null,避免出現null,count()統計不會計null
10.需要存儲表情需要UTF8mb4
11.使用搜索引擎sphinx替代模糊搜索
12.explain執行計劃中的extra項中有Using filesort或Using temporary時,考慮創建排序索引和分組索引
13.pt-query-digest捕獲慢查詢語句
—————————————————————————————————————-
5(附加)
優化一條SQL語句:
1.表的數據類型是否設計得合理,數據類型越簡單越小原則
2.表中碎片整理,alter table comment_infos engine = innodb;
3.查看表的統計信息,select * from information_schema.tables where table_name=”comment_infos”\G;
4.explain查看執行計劃
5.建索引前查看該字段的選擇性,越接近1越高,主鍵索引和唯一索引的選擇性是1
6.在查看explain,對比索引效果。在合理的字段建立索引:經常出現在where后;經常order by或group by;經常表連接。
總結
以上是生活随笔為你收集整理的mysql8 优化_MySQL 8.0 优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unreal4怎么设置游戏模式_在Unr
- 下一篇: mysql的timestamp类型_My