1.參數優化
show variables like ''
/etc/my.cnf
[mysqld]
Max_connections =1024 #請求的最大連接數
back_log =1024 #mysql能暫存的連接數量,當連接數達到max_connections時新連接會被存儲到堆棧中
wait_timeout=100 #關閉一個非交互的連接之前所要等待的秒數
interactive_timeout=7200 #設置的時間就會自動斷掉
key_buffer_size=128M #索引緩沖區的大小,決定索引處理的速度
query_cache_size=256M #查詢緩存
query_cache_type=1 #緩存類型,1為緩存所有
max_connect_errors=20 #阻止過多嘗試失敗的客戶端連接
sort_buffer_size=2M #每個需要進行排序的線程分配該大小的一個緩沖區
max_allowed_packet=32M #server接受的數據包大小
join_buffer_size=2M #表間關聯緩存的大小
thread_cache_size = 300 #服務器線程緩存
innodb_buffer_pool_size= 2048M #InnoDB使用該參數指定大小的內存來緩沖數據和索引
innodb_flush_log_at_trx_commit =2 #主要控制了innodb將log buffer中的數據寫入日志文件並flush磁盤的時間點,取值分別為0、1、2三個。0,表示當事務提交時,不做日志寫入操作,而是每秒鍾將log buffer中的數據寫入日志文件並flush磁盤一次;1,則在每秒鍾或是每次事物的提交都會引起日志文件寫入、flush磁盤的操作,確保了事務的ACID;設置為2,每次事務提交引起寫入日志文件的動作,但每秒鍾完成一次flush磁盤操作。
innodb_thread_concurrency = 0 #innodb線程的並發數量,默認值為0表示不限制
innodb_log_buffer_size=32M #此參數確定些日志文件所用的內存大小,以M為單位。緩沖區更大能提高性能,對於較大的事務,可以增大緩存大小。
innodb_log_file_size = 50M #此參數確定數據日志文件的大小,以M為單位,更大的設置可以提高性能.
read_buffer_size = 1M #讀入緩沖區大小
read_rnd_buffer_size = 16M #MySql 的隨機讀(查詢操作)緩沖區大小
bulk_insert_buffer_size = 64M #批量插入數據緩存大小,可以有效提高插入效率,默認為8M
log-bin=/usr/local/mysql/data/mysql-bin
binlog_cache_size = 2M #為每個session 分配的內存,在事務過程中用來存儲二進制日志的緩存, 提高記錄bin-log的效率
max_binlog_cache_size = 8M //表示的是binlog 能夠使用的最大cache 內存大小
max_binlog_size= 512M //指定binlog日志文件的大小,如果當前的日志大小達到max_binlog_size,還會自動創建新的二進制日志。你不能將該變量設置為大於1GB或小於4096字節。默認值是1GB。在導入大容量的sql文件時,建議關閉sql_log_bin,否則硬盤扛不住,而且建議定期做刪除。
expire_logs_days = 7 //定義了mysql清除過期日志的時間。二進制日志自動刪除的天數。默認值為0,表示“沒有自動刪除”。
mysqladmin flush-logs 也可以重新開始新的binarylog
MYSQL性能優化的最佳20+條經驗
1. 為查詢緩存優化你的查詢-大多數的MySQL服務器都開啟了查詢緩存
2. EXPLAIN 你的 SELECT 查詢
3. 當只要一行數據時使用 LIMIT 1
4. 為搜索字段建索引
5. 在Join表的時候使用相當類型的例,並將其索引
6. 避免 SELECT *
7. 永遠為每張表設置一個I
8. 盡可能的使用 NOT NULL