## 1、操作系統配置優化
數據庫是基于操作系統的,目前大多數MySQL都是安裝在Linux系統之上,所以對于操作系統的一些參數配置也會影響到MySQL的性能,下面就列出一些常用到的系統配置。
* 網絡方面的配置,要修改‘/etc/sysctl.conf’文件
* 增加tcp支持的隊列數
* net.ipv4.tcp\_max\_syn\_backlog = 65535
* 減少斷開連接時,資源回收
* net.ipv4.tcp\_max\_tw\_buckets = 8000
* net.ipv4.tcp\_tw\_reuse = 1
* net.ipv4.tcp\_tw\_recycle = 1
* net.ipv4.tcp\_fin\_timeout = 10
* 打開文件數的限制,可以使用ulimit -a查看目錄的各位限制,可以修改‘/etc/security/limits.cinf’文件,增加以下內容以修改打開文件數量的限制。
* soft nofile 65535
* hard nofile 65535
* 除此之外最好在 MySQL 服務器上關閉 iptables,selinux 等防火墻軟件。
## 2、MySQL配置文件優化
MySQL可以通過啟動時指定配置參數和使用配置文件兩種方法進行配置,在大多數情況下配置文件位于 /etc/my.cnf 或是 /etc/mysql/my.cnf 在windows系統配置文件可以是位于 C:/windows/my.ini 文件,MySQL查找配置文件的順序可以通過以下方法獲得。
```linux
$ /usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'
```
`注意:如果多個位置存在配置文件,則后面的會覆蓋前面的。`
**常用配置參數說明**
* innodb\_buffer\_pool\_size
* 非常重要的一個參數,用戶配置Innodb的緩沖池如果數據庫中只有Innodb表,則推薦配置量為總內存的75%。
```sql
SELECT ENGINE,ROUND(SUM(data_length + index_length)/1024/1024,1) AS "Total MB",
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema not in ("information_schema","performance_schema")
GROUP BY ENGINE;
Innodb_buffer_pool_size >= Total MB
```
* innodb\_buffer\_pool\_instances
* MySQL5.5中新增加參數,可以控制緩沖池的個數,默認情況下只有一個緩沖池。
* innodb\_log\_buffer\_size
* innodb log 緩沖的大小,由于日志最長每秒鐘就會刷新所以一般不用太大。
* innodb\_flush\_log\_at\_trx\_commit
* 關鍵參數,對innodb的IO效率影響很大。默認值為1,可以取0,1,2三個值,一般建議設為2,但如果數據安全性要求比較高則使用默認值1。
* innodb\_read\_io\_threads/innodb\_write\_io\_threads
* 以上兩個參數決定了Innodb讀寫的IO進程數,默認為4。
* innodb\_file\_per\_table
* 關鍵參數,控制Innodb每一個表使用獨立的表空間,默認為OFF,也就是所有表都會建立在共享表空間中。
* innodb\_stats\_on\_metadata
* 決定了MySQL在什么情況下會刷新innodb表的統計信息。
## 3、第三方配置工具
[https://tools.percona.com/wizard](https://tools.percona.com/wizard)
回答相應問題,會得到配置推薦。