數據庫插入速度和讀取速度的調整記錄
(1)提高數據庫插入性能中心思想:盡量將數據一次性寫入到Data File和減少數據庫的checkpoint 操作。這次修改了下面四個配置項:
1)將 innodb_flush_log_at_trx_commit 配置設定為0;按過往經驗設定為0,插入速度會有很大提高。
系統插入速度由于原來10分鐘幾萬條提升至1秒1W左右;注:以上參數調整,需要根據不同機器來進行實際調整。特別是 innodb_flush_log_at_trx_commit、 innodb_log_buffer_size和 innodb_log_file_size 需要謹慎調整;因為涉及MySQL本身的容災處理。
(2)提升數據庫讀取速度,重數據庫層面上讀取速度提升主要由于幾點:簡化SQL、加索引和分區; 經過檢查程序SQL已經是最簡單,查詢條件上已經增加索引。我們只能用武器:表分區。
1)將 innodb_flush_log_at_trx_commit 配置設定為0;按過往經驗設定為0,插入速度會有很大提高。
- 0: Write the log buffer to the log file and flush the log file every second, but do nothing at transaction commit.
- 1:the log buffer is written out to the log file at each transaction commit and the flush to disk operation is performed on the log file
- 2:the log buffer is written out to the file at each commit, but the flush to disk operation is not performed on it
- 此配置項作用主要是當tablespace 空間已經滿了后,需要MySQL系統需要自動擴展多少空間,每次
tablespace 擴展都會讓各個SQL 處于等待狀態。 增加自動擴展Size可以減少tablespace自動擴展次數。
- 此配置項作用設定innodb 數據庫引擎寫日志緩存區;
將此緩存段增大可以減少數據庫寫數據文件次數。
- 此配置項作用設定innodb 數據庫引擎UNDO日志的大??;
從而減少數據庫checkpoint操作。
(2)提升數據庫讀取速度,
- 數據庫 MySQL分區前準備:在MySQL中,
表空間就是存儲數據和索引的數據文件。 - 將S11數據庫由于同享tablespace 修改為支持多個tablespace;
- 將wb_user_info_sina 和 wb_user_info_tx 兩個表修改為各自獨立表空間;(Sina:1700W數據,2.
6G 大數據文件,Tencent 1400W,2.3G大數據文件); - 分區操作:
- 將現有的主鍵和索引先刪除
- 重現建立id,uid 的聯合主鍵
- 再以 uid 為鍵值進行分區。這時候到/var/data/mysql 查看數據文件,
可以看到兩個大表各自獨立表空間已經分割成若干個較少獨立分區空 間。(這時候若以uid 為檢索條件進行查詢,并不提升速度; 因為鍵值只是安排數據存儲的分區并不會建立分區索引。 我非常郁悶這點比Oracle 差得不是一點半點。) - 再以 uid 字段上進行建立索引。再次到/var/data/mysql 文件夾查看數據文件,非常郁悶地發現各個分區Size竟然大了。
MySQL還是老樣子將索引與數據存儲在同一個tablespa ce里面。若能index 與 數據分離能夠更加好管理。
MK-TIANYI