MySQL服務器參數介紹
mysql參數介紹(客戶端中執行),盡量只修改session級別的參數。
全局參數(新連接的session才會生效,原有已經連接的session不生效)
- set global 參數名=參數值;
- set @@global.參數名 :=參數值;
會話參數
- set [session] 參數名=參數值;
- set @@session.參數名 :=參數值;
內存配置相關參數
- 確定可以使用的內存的上限
- 確定mysql每個連接使用的內存
sort_buffer_size:需要注意,每個連接分配指定大小的內存;
join_buffer_size;
read_buffer_size;
read_rnd_buffer_size。
上述都為每個進程分別進行設置,所以要注意配置大小。
- 確定需要為操作系統保留多少內存
- 如何為緩存池分配內存
Innodb_buffer_pool_size:總內存 - (每個線程所需內存 * 連接數) - 系統保留內存
key_buffer_size:主要用於myisam引擎
IO相關配置參數
Innodb I/O相關配置
- Innodb_log_file_size:單個日志文件大小
- Innodb_log_files_in_group:日志文件的個數
- 事務日志總大小:
Innodb_log_files_in_group * Innodb_log_file_size
- Innodb_log_buffer_size:日志緩沖區大小
- Innodb_flush_log_at_trx_commit:日志刷新的頻率
0:每秒進行一次log寫入cache,並flush log到磁盤。如果mysql關閉或重啟會導致至少1秒日志的丟失。
1:『默認』,在每次事務提交執行log寫入cache,並flush log到磁盤。保證不會導致事務日志的丟失。
2:【建議】,每次事務提交,執行log數據寫入到cache。每秒執行一次flush log到磁盤。
- Innodb_flush_method=O_DIRECT:Innodb刷新的方式。
- Innodb_file_per_table=1:表空間。強烈建議啟用。
- Innodb_doublewrite=1:
Myisam I/O相關配置
- delay_key_write
OFF:每次寫操作后刷新新建緩沖區的臟塊到磁盤
ON:只對建表是指定了delay_key_write選項的表使用延遲刷新。
ALL:對所有MYISAM表使用延遲鍵寫入。會導致表損壞,使用相關命令進行修復。
安全相關配置參數
- expire_logs_days指定自動清理binlog的天數
- max_allowed_packet控制mysql可以接收的包的大小
- skip_name_resolve禁用DNS查找
- sysdate_is_now確保sysdate和now返回的日期是一樣的。(同一條sql同時使用sysdate返回的結果有可能是不同的,因而建議啟用)
- read_only禁止非super用戶寫權限:在做主從復制時,建議備庫啟用這個配置項。
- skip_slave_start警用slave自動恢復,(從服務器中進行配置)
- sql_mode設置mysql所使用的sql模式。(建議不要在生產換環境中調整這個值,有可能會導致系統不可用)
strict_trans_tables
no_engine_subtitution
no_zero_date
no_zero_in_date
only_full_group_by:select字句需要全部列出group by字段,否則報錯。
其它常用配置參數
- sync_binlog控制mysql如何向磁盤中刷新binlog
- tmp_table_size和max_heap_table_size控制內存臨時表的大小。兩個值應保持一致
- max_connections允許最大連接數,一般設置為2000都可以。
數據庫設計對性能的影響(所有優化的重點,其它的所有優化加起來都未必有數據庫設計優化對性能的影響大)
- 過分的反范式話為表建立太多的列
- 過多的范式話造成太多表的關聯(最多只允許61個表關聯)
- 在OLTP中使用不恰當的分區表
- 使用外鍵保證數據的完整性(性能很低,建議不要使用外鍵約束)
優化建議
性能優化順序
- 數據庫結構和sql語句優化
- 數據庫引擎的選擇和參數配置(不要混合使用存儲引擎)
- 系統選擇及優化
- 硬件升級