Sort_Buffer_Size 設定對伺服器效能的影響

yuanqc發表於2018-09-29

https://www.cnblogs.com/wajika/p/6718552.html


Sort_Buffer_Size 設定對伺服器效能的影響


基礎知識:

1。 Sort_Buffer_Size 是一個connection級引數,在每個connection第一次需要使用這個buffer的時候,一次性分配設定的記憶體。
2。 Sort_Buffer_Size 並不是越大越好,由於是connection級的引數,過大的設定+高併發可能會耗盡系統記憶體資源。
3。 文件說“On Linux, there are thresholds of 256KB and 2MB where larger values may significantly slow down memory allocation” 

本文主要針對第三點做測試:
據說Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行記憶體分配,導致效率降低。


環境:

為了更大的體現效能差距,使用 1GB記憶體的Fedora 虛擬機器進行測試

測試表結構:

1w 行的表, 表結構

+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| k     | int(10) unsigned | NO   | MUL | 0       |                |
| c     | char(120)        | NO   |     |         |                |
| pad   | char(60)         | NO   |     |         |                |
+-------+------------------+------+-----+---------+----------------+



測試語句:

分別設定Sort_Buffer_Size 為 250K ,512K, 3M ,然後執行以下語句,檢視執行時間。
1. sql_no_cache 防止query cache起效。
2. limit 1 為了減少排序佔執行時間的比重,更多的體現記憶體分配帶來的影響
3. 語句explain的結果是 filesort , 以確保使用sort_buffer


  1. mysqlslap -uroot -h127.0.0.1 -q ' select sql_no_cache * from sbtest order by pad limit 1' -c 100 --create-schema=test -i 10


複製程式碼

測試結果:

執行時間

250K : 1.318s
512K : 1.944s
3M     : 2.412s

 

250 K
[root@localhost tmp]# mysqlslap -uroot -h127.0.0.1 -q ' select sql_no_cache * from sbtest order by pad limit 1' -c 100 --create-schema=test -i 10
Benchmark
        Average number of seconds to run all queries: 1.318 seconds
        Minimum number of seconds to run all queries: 1.285 seconds
        Maximum number of seconds to run all queries: 1.378 seconds
        Number of clients running queries: 100
        Average number of queries per client: 1

512 K

[root@localhost tmp]# mysqlslap -uroot -h127.0.0.1 -q ' select sql_no_cache * from sbtest order by pad limit 1' -c 100 --create-schema=test -i 10
Benchmark
        Average number of seconds to run all queries: 1.944 seconds
        Minimum number of seconds to run all queries: 1.362 seconds
        Maximum number of seconds to run all queries: 4.406 seconds
        Number of clients running queries: 100
        Average number of queries per client: 1

3M
[root@localhost tmp]# mysqlslap -uroot -h127.0.0.1 -q ' select sql_no_cache * from sbtest order by pad limit 1' -c 100 --create-schema=test -i 10
Benchmark
        Average number of seconds to run all queries: 2.412 seconds
        Minimum number of seconds to run all queries: 2.376 seconds
        Maximum number of seconds to run all queries: 2.527 seconds
        Number of clients running queries: 100
        Average number of queries per client: 1



結論:
確實如文件所說, 使用mmap 分配記憶體時,會帶來效能上的損耗,影響大約在 30% 左右


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10973950/viewspace-2215232/,如需轉載,請註明出處,否則將追究法律責任。

相關文章