MySQL壓力測試中定制sysbench的Lua模板
對于sysbench的定制,自己給自己定了一個小目標(biāo),但是實踐的時候發(fā)現(xiàn),難度比想象的要大很多。
都說Lua很簡單,性能很不錯,但是定制sysbench的模板的時候,越是深入去看,越覺得少了一些東西。
這個時候我想起了學(xué)習(xí)的周期和復(fù)雜度的一個說法,如果想快速學(xué)習(xí)一門技術(shù),一種方式是通過代碼來理解它的實現(xiàn),來反推它的邏輯,這種方式的難度極大,而我前幾天發(fā)現(xiàn)嘗試的就是這種,這種方式非常苦悶,但是如果能夠沉下心來,看代碼看到一種程度之后,有了感覺相信就會融會貫通了。
還有一種方式,算是捷徑,就是去聽聽作者怎么說,通過他的分享來從整體對一個項目有一個基本的認(rèn)識和了解,就好比你去拜訪一個朋友,他熱情的把你領(lǐng)進(jìn)門,帶著你走走客廳,走走臥室,給你介紹房子的裝修風(fēng)格,里面的家具和電器,為什么要這么設(shè)計,很快你就能夠?qū)@一切熟悉起來。這種方式很好,而且最省事,但是可遇不可求。
對于sysbench的學(xué)習(xí)如果有這樣的方式也是極好的,所以我們就可以想辦法找找sysbench作者的心路歷程。自從0.5版本之后,有相當(dāng)長的一段時間就沒有深入維護(hù)了。
而從2016年開始,重啟了這個計劃。
所以sysbench是依舊是我們MySQL壓力測試的老朋友,這么多年,還依然是主流的測試工具,自有他流行的道理。
回到定制Lua模板的部分,如果我們反推Lua的邏輯,和sysbench聯(lián)系起來,我們可能要花上幾倍的代價,不如聽聽sysbench作者怎么說。
壓力測試前,我們配置一下環(huán)境,創(chuàng)建一個用戶和數(shù)據(jù)庫。
- mysql> create user sysbench_test identified by 'mysql';
- Query OK, 0 rows affected (0.08 sec)
- mysql> create database sysbench_db character set utf8;
- Query OK, 1 row affected (0.08 sec)
- mysql> grant all on sysbench_db.* to sysbench_test@'%';
- Query OK, 0 rows affected (0.00 sec)
然后配置一個最簡單的Lua模板,內(nèi)容如下:
- #!/usr/bin/env sysbench
- function event()
- db_query(
- "SELECT 1"
- )
- end
運行的時候,配置執(zhí)行權(quán)限,chmod +x test1.lua,然后執(zhí)行
- ./test1.lua --mysql-user=sysbench_test --mysql-password=mysql --mysql-host=127.0.0.1 --mysql-port=65535 --mysql-db=sysbench_db run
其中參數(shù)--mysql-user=sysbench_test --mysql-password=mysql --mysql-host=127.0.0.1 --mysql-port=65535是為了連接,如果你是使用3306端口的默認(rèn)配置命令就更簡單了,輸出如下:
此外我們還可以驗證命令選項。我們推出第2個Lua模板 test2.lua
- sysbench.cmdline.options = {
- tables = {"Number of tables", 1},
- table_size = {"Number of rows per table", 10000},
- create_secondary = {"Create a secondary key", true}
- }
如果命令選項不對,會檢查出來。
- sysbench --tbales=8 test2.lua --mysql-user=sysbench_test --mysql-password=mysql --mysql-host=127.0.0.1 --mysql-port=65535 --mysql-db=sysbench_db run
- invalid option: --tbales=8
如果沒有問題,則可以使用help來得到初始化后的選項值。
- # sysbench test2.lua help
- sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
- test2.lua options:
- --table_size=N Number of rows per table [10000]
- --tables=N Number of tables [1]
- --create_secondary[=on|off] Create a secondary key [on]
接下來就是重點了,關(guān)于SQL API的定制,其實是有規(guī)則可循的。
我們來看看第3個Lua模板,test3.lua
- function thread_init()
- drv = sysbench.sql.driver()
- con = drv:connect()
- end
- function event()
- con:query("SELECT 1"
- )
- end
- function thread_done()
- con:disconnect()
- end
使用命令即可完成測試。
- sysbench test3.lua --mysql-user=sysbench_test --mysql-password=mysql --mysql-host=127.0.0.1 --mysql-port=65535 --mysql-db=sysbench_db run
后續(xù)繼續(xù)補(bǔ)充更多的Lua模板。