MySQL Innodb資料庫效能實踐

2021-06-07 19:39:53 字數 1354 閱讀 5550

在實際工作中,經常有同事問道:mysql innodb表記錄數多大是合適的?

一般的理解肯定是表越大效能越低,但具體低多少呢,是緩慢下降還是急劇下降,是1000萬就下降還是1億才下降呢?

針對這些問題,我做了一下基準測試,基準測試環境如下:

【硬體配置】

硬體配置

cpuintel(r) xeon(r) cpu e5620 主頻2.40ghz, 物理cpu 2個,邏輯cpu 16個

記憶體24g(6塊 * 4g  ddr3 1333 reg)

硬碟300g * 3個,sas硬碟 15000轉,無raid,有raid卡,且開了回寫功能

osrhel5

mysql

5.1.49/5.1.54

【mysql配置】

配置項配置

innodb_buffer_pool_size

18ginnodb_log_file_size

200m

innodb_log_files_in_group

3sync_binlog

100innodb_flush_log_at_trx_commit

2【表配置】

配置項配置

記錄數1000萬,2000萬,5000萬,1億

儲存引擎

innodb

行格式compact

效能測試結果如下:

1)同一張表,不同記錄數,測試結果如下:

分析如下:

(1)當表大小小於inndob buffer pool時,整體效能會隨著表記錄數的增加而略微降低,但各種操作的效能差別總體不大(例如1kw/2kw是12000tps,5kw是10000tps,相差16%)。

(2)當表大小大於innodb buffer pool(10kw)時,效能急劇下降(從12000降到1000),效能接近高安全性配置的效能,因為此時磁碟io成為了效能的主要影響因素。

因此,表記錄數本身對效能影響不大,關鍵是表的大小是否小於innodb buffer pool。

2)不同的表,不同的記錄數

為了進一步驗證表記錄對效能的影響,還驗證了另外一種情況:記錄數很大但每條記錄較短,和記錄數較少但每條記錄很長兩種表對比。

主要對比了value長度為10(以下簡稱value10)和value長度為250(以下簡稱value250)的表的效能。由於innodb只有在buffer pool大於表大小的時候效能才最高,因此測試對比時為了滿足這個條件,value10的表記錄數是10kw,而value250的表記錄數是2kw。

從上圖可以看出,即使value10的表記錄數是value250的表記錄數的5倍,但效能反而高出16%左右,由此可以看出,相比表記錄數來說,行長度對效能影響更大,行越長效能越低。

【應用建議】

mysql innodb資料庫的優化

硬體概況 linux伺服器,64位4核cpu,8g記憶體。主要引數 innodb buffer pool size 這個引數很重要,越大越好,對於專用的資料庫伺服器一般建議開伺服器記憶體的50 以上。query cache size 查詢快取,對於查詢的效能提高有很大幫助,但不宜開得過大,查詢快取的...

MySql innodb 資料庫備份和遷移

首先說明,這個題目有點大,題目與實際內容不符。最近幾天,在進行資料融合處理時,需要對innodb表 資料以多表形式進行儲存,由共享表轉為多表,網上資料比較多,不再贅述 的資料進行頻繁備份和替換,涉及到innodb資料庫表的備份處理。通過查閱mysql的官方文件,給出兩種備份方式 單錶備份和使用商業軟...

資料庫約束性

1 null not null 用於定義列的空值約束。定義列 下面的藍色部份是單選其中之一 語法 constraint 約束名 null not null a.not null 約束強制列不接受 null 值。b.not null 約束強制字段始終包含值。這意味著,如果不向字段新增值,就無法插入新紀...