最近我們業務上也遇到資料庫效能問題,我們有乙個環節是扣費操作,在併發度較高的場景下,資料庫延遲較高,吞吐降低。我們業務中的這個場景和秒殺場景一致。因此想使用alisql來替換mysql,帶來效能上的提公升。
使用alisql之前,我們先對alisql的效能做壓測。自己從alisql專案倉庫 clone 了乙份**,然後編譯安裝。硬體採用8c-16g配置,為了做對照,另外弄了乙個完全一樣的機器部署mysql,同時,購買了8c-16g配置的阿里雲rds,版本都是mysql 5.6。
alisql 採用推薦配置推薦配置,mysql和rds採用預設配置。
資料庫的qps和rt
採用效能基準測試工具sysbench,指令碼採用alisql團隊給出的測試指令碼alisql_ic.lua
因為我們就想測試對於單錶單行更新的效能,因此sysbench測試的表數量和表大小都設定為1。
這裡順便解釋一下alisql_ic.lua指令碼,其中有這麼一段語句:
if (oltp_inventory_mysql_type == "alisql") then
db_query("update commit_on_success rollback_on_fail queue_on_pk 1 target_affect_row 1 " .. table_name .. " set c=c+1 where id = 1")
else
db_query("update " .. table_name .. " set c=c+1 where id = 1")
end
如果引數oltp_inventory_mysql_type
設定為alisql,則語句執行會有commit_on_success
,作用是,如果帶此hint的語句執行成功,事務就預設提交。這個有什麼好處呢?正常的使用方法是更新、等待成功、發commit。加這個hint可以減少事務提交的最後一次互動,在系統壓力大或者網路較長的場景下,這是可以減少事務持續時間,提公升整體吞吐量的,另外還有引數是提示排隊的。
接下來就是設定不同的執行緒數,採用sysbench 來壓測了,prepare、run、cleanup和其他壓測情況一下。我們所採用的壓測語句如下:
sysbench --mysql-host
=localhost --mysql-port
=3306
--mysql-user
=username --mysql-password
=passwd /opt/sysbench-
1.0.3/tests/include/oltp_legacy/alisql_ic.lua --oltp-table
-size=1
--oltp-tables
-count=1
--num-threads=2
--time=
60--
max-requests=0
--report-interval=1
--db-driver
=mysql prepare
thread
alisql_qps
alisql_rt
mysql_qps
mysql_rt
rds_qps
rds_rt
1513.64
5.84
948.69
3.16
853.73
3.51
2540.91
11.09
988.01
6.07
1732.29
3.46
4569.68
21.06
980.23
12.24
2218.52
5.41
8552.33
43.43
953.41
25.16
2174.28
11.03
16561.18
85.47
975.10
49.20
2205.97
21.75
32553.12
173.28
1007.76
95.18
2250.48
42.64
64554.19
345.41
983.85
194.82
2210.52
86.79
其實看結果,很明顯能夠看出來。alisql比普通的mysql的效能還差。
我們自己也用寫了個小工具來做壓測對比,得到的結果也是alisql表現的效能比mysql差。仔細想想alisql效能比較差,應該是採用了推薦配置導致的,推薦配置和mysql的預設配置不一樣。
結果比較意外,這裡我們懷疑的是開源的這部分alisql並沒有把批處理特性開放出來,所以用起來感覺就是個普通的mysql,毫無差別,這裡我還黑了我們運維是否編譯的是乙個原生mysql。看結果rds的效能最好,rds是阿里雲提供的收費的資料庫服務,這些好不容易開發出來的特性,肯定不會那麼容易開放出來吧。
在我們業務中當然沒有採用alisql,我們自己在業務層做了一些優化,這個後續會拿出來介紹。
如果有alisql的同學看到,覺得不對的地方可以聯絡我,看是否我哪個步驟不對。
web版本 開源壓測工具 免費壓測工具
很多的web應用在搭建伺服器完成後,為了讓搭建的服務能夠滿足使用者的訪問需求,通常需要測試自己應用的併發連線能力。需要使用一些壓測工具,本文介紹一些免費的開源的壓測工具,可以用於簡單的壓力測試 實驗均在linux系統下 1.ab工具 ab的全稱是apache bench,是apache自帶的網路壓力...
壓測和防止壓測方案
壓測 防止壓測方案 1.壓測 1 壓測工具 ab 2 壓測請求方式 get 3 壓測網域名稱 url 4 壓測方案 10萬請求,500併發 5 壓測指令碼 ab n 100000 c 500 url 6 展示壓測結果 從上面分析,10萬請求錯誤有 96881 次請求錯誤,基本上也就是很大的問題了 7...
壓測 mysql關閉連線 MySQL 壓測
mysqlslap iterations 100 create schema test query query.sql number of queries 20000 delimiter concurrency 100 3.2.2 網路引數問題 問題描述 使用mysqlslap 壓測某個語句,當併發...