Mysql效能最佳化小建議,Mysql效能最佳化

來源:互聯網
上載者:User

Mysql效能最佳化小建議,Mysql效能最佳化

Mysql的效能最佳化主要參考文章[1],[2],和[3],其中已使用且比較有效果的有:

1. 實用最佳化

(1)禁止autocommit, 防止每次插入都提交,重新整理log

SET autocommit=0;... SQL import statements ...COMMIT;
(2) 對頻繁查詢的欄位建立索引,但要注意加入索引後,執行插入操作時會變慢

(3)當只要一行資料時使用 LIMIT 1

SELECT 1 FROM tbl_name LIMIT 1
註:SELECT 1 是用來查看是否有記錄的,並一般用作條件查詢(normally it will be used with WHERE and often EXISTS), 返回的所有行的值都是1。效率上來說,1>anycol>*,因為不用查字典表。[4]

(4)永遠為每張表設定一個ID
為資料庫裡的每張表都設定一個ID做為其主鍵,而且最好的是一個INT型的(推薦使用UNSIGNED),並設定上自動增加的AUTO_INCREMENT標誌。

(5)一次插入多行

INSERT INTO yourtable VALUES (1,2), (5,5), ...;

2. 配置最佳化

下面對Disk I/O和query_cache的最佳化做一個總結,並假設我們使用的機器記憶體為8GB。以下的參數都在檔案my.cnf的[mysqld]下設定。

(1)innodb_buffer_pool_size 和 innodb_log_file_size

建議設定大小來自文章[5]

## Set buffer pool size to 50-80% of your computer's memoryinnodb_buffer_pool_size=4Ginnodb_additional_mem_pool_size=256M## Set the log file size to about 25% of the buffer pool sizeinnodb_log_file_size=1Ginnodb_log_buffer_size=256M
怎麼安全的更改這個配置,來自於[6]

mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"service mysqld stoprm -f /var/lib/mysql/ib_logfile[01]service mysqld start
其中 service mysqld stop是centos下的命令,但ubuntu等其他Linux系統可能實用service mysql stop
(2)query_cache_size

參數的說明見文章[7] ,但並未提到建議大小,反而提到設定太大也會有壞處。本人設定的大小如下:

query_cache_type=1query_cache_limit=2Mquery_cache_size=128M
其中query_chache_type=1表示開啟查詢快取,query_cache_size是總的查詢快取大小,query_cahce_limit表示單個查詢最大的緩衝大小。

設定完之後,執行以下操作便可:

service mysqld restart
(3) innodb_flush_method

innodb_flush_method設定成O_DIRECT還是O_DSYNC,文章[2]中說設定成O_DIRECT會增加效能,但在文章[8]和[2]中這兩個參數在實際使用時差不多,並且跟具體使用的硬體相關。所以設定成O_DIRECT是否會最佳化效能,還不是很確定

(4)max_allowed_packet

此參數是當網路傳輸資料時,需要控制的參數,如果傳輸的資料太大(特別是當存在large BLOB columns or long strings資料時),超過max_allowed_packet的上限時,就有可能發生錯誤,所以就要提高此參數。本人的設定是:

max_allowed_packet = 16M

註:

1. 查看系統變數的一些命令

show variables like 'innodb_buffer%';SHOW GLOBAL STATUS LIKE '%innodb%';show global status like 'Qc%';
2. 本人的配置

Reference

[1] InnoDB Performance Tuning Tips

[2] How to improve MySQL INSERT and UPDATE performance?

[3] MySQL效能最佳化的最佳20+條經驗

[4] select 1 from ... sql語句中的1代表什麼意思?

[5] InnoDB Configuration

[6] How to safely change MySQL innodb variable 'innodb_log_file_size'?

[7] Query Cache Configuration

[8] mysql setting variable innodb_flush_method to O_DSYNC or O_DIRECT

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.