MySQL的壓測
自己原文公眾號: https://mp.weixin.qq.com/s/o7HjQwEVcbkWUkG6Hzlwsw
首先這個篇技術貼。前面先鋪墊一下,最近蘇伊士運河的各種新聞。 我以前讀中東戰爭時候不理解為什麼有一次叫蘇伊士運河戰爭,也不明白為什麼要爭奪西奈半島和戈蘭高地。這次算是徹底明白了。看到上面的圖,蘇伊士運河是咽喉要道,而半島和高地直接控制這片區域。
本文起因是系統的瓶頸是什麼?一般來說瓶頸都在資料庫,資料庫瓶頸都在IO。如果讓資料庫拜託IO,即我們都讀記憶體。會是如何?
基於以上我分幾天來說,今天是MySQL篇,後面再有Oracle和PG。水平有限就自己假設了。我們模擬一下登入,有不少人擔心繫統登入是瓶頸。其實不然。看看我們實驗。
create table user ( id int auto_increment,userid varchar(10),password varchar(10), primary key(id)) ;使用者表
create table qx (id int,userid varchar(10),qx varchar(10));許可權表
這裡是關鍵,為什麼?因為一般開發設計的許可權表特別複雜,效率不高。我這裡是理想化的設計,為了看看最快如何?
我見過別人設計的一登陸查選單,也不管用不用得到。選單是級聯的。10個父選單,每個父選單都有10個子選單,然後才來一級。所以一登陸就1000個SQL。實在不知道那家公司的是怎麼設計的,什麼腦回路。
這種一般都會對我說:
1、這是我們產品就這樣設計的
2、我們程式碼底層是這樣設計的
3、框架就這樣設計的。
總之一句話,讓我改是不可能的。
所以這裡(設計)就是蘇伊士運河,所有的問題我發現幾乎都來自設計或者實現。
資料庫是蘇伊士灣,雖然比起來外面的大海不具備可擴充套件性,但是處理這些還是綽綽有餘的,不是每個國家(公司)都是有十幾個航母編隊,幾千戰艦去把蘇伊士灣(資料庫承受能力以外)堵死的。
如果這兩個都解決不了,外面的星辰大海(地中海和紅海),就算你能擴充套件又如何?
create procedure 模擬50萬使用者,然後我們再寫一個儲存過程去讀這些資料。
DELIMITER //
CREATE PROCEDURE us()
BEGIN
DECLARE v int;
SET v = 0;
loop_label: LOOP
insert into user (userid,password) values ( concat('t',v),v);
SET v = v + 1;
IF v>=500000 THEN
LEAVE loop_label;
END IF;
end loop;
END; //
其實資料庫的讀能力很強的,前幾天騰訊金融的姜老師發的MySQL每秒120 萬次QPS,那是用官方的壓測工具測試的,機器CPU也多。全部滿負荷的。
我們今天來試試單CPU的。
BEGIN
DECLARE v int;
DECLARE a varchar(10);
DECLARE b varchar(10);
DECLARE c varchar(10);
DECLARE d varchar(10);
SET v = 0;
loop_label: LOOP
select userid,password into a,b from user where userid=concat('t',v);
select userid,password into c,f from qx where userid=concat('t',v);
SET v = v + 1;
IF v>=500000 THEN
LEAVE loop_label;
END IF;
end loop;
END
僅僅表示拿到使用者名稱 密碼和許可權。這是登入最簡單的場景。如果你設計了登入以後還有很多操作要做,那你勢必影響登入效率。看看淘寶 京東 微博 登入都是比較簡單的頁面,沒有後臺實時計算什麼的。
我一直認為登入就應該是簡單的,不應該有壓力。因為查詢是所有資料庫中操作最輕的。
如果你登入都擔心,那就不擔心登入以後的瀏覽和下單嗎?那些操作才是真正的壓力。
單執行緒CPU全滿的效果是每秒1萬。50萬全部執行完畢大約50秒,平均每秒讀1萬次。
開了3個以後那麼3個CPU滿負荷也就是 說3個每秒1萬的登入是可以的。那麼我們得到一個理想化的結論,在設計簡化的前提下,承載能力是每秒每個CPU可以處理1萬次請求。充分利用資料庫多執行緒。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2847518/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql benchmarksql 壓測MySql
- benchmarksql 5.0壓測MySQLMySql
- MYSQL壓縮表測試MySql
- tpcc-mysql 壓測報告MySql
- MySQL壓測工具mysqlslap的介紹與使用MySql
- MySQL 寫入壓測幾種方式MySql
- Mysql效能壓測、Binlog恢復資料MySql
- 使用 locust 對 mysql 語句進行壓測MySql
- Oracle的壓測Oracle
- MySQL 效能壓測工具,從入門到自定義測試項MySql
- MySQL 5.7和8.0 MHA架構下sysbench壓測MySql架構
- MySQL原理簡介—3.生產環境的部署壓測MySql
- MySQL 5.6的表壓縮MySql
- MySQL 效能壓測工具-sysbench,從入門到自定義測試項MySql
- 每秒 50 萬行——MySQL 寫入壓測併發實踐MySql
- locust壓測
- ClickHouse壓測
- 壓測流程
- Taurus.MVC 效能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET 版本MVCLinux
- 壓測的話, 壓測客戶端多 IP 和一個 IP 多埠進行壓測有區別嗎?客戶端
- mysql之 sysbench1.0.3 安裝與系統壓力測試MySql
- Taurus.MVC 效能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本MVCLinux
- 全鏈路壓測演進之迭代式壓測
- apache ab壓力測試工具-批次壓測指令碼Apache指令碼
- 如何提高 Locust 的壓測效能
- 全鏈路壓測(4):全鏈路壓測的價值是什麼?
- 壓力測試
- kafka壓測工具Kafka
- 談談壓測
- 壓測工具 wrk
- mysqlslap效能壓測MySql
- mysqlslap 效能壓測MySql
- 全鏈路壓測(1):認識全鏈路壓測
- 告別傳統壓測:全鏈路壓測在中通的實踐分享
- mysql壓縮解決方案MySql
- Hyperf 與 Lumen 的壓測比對
- 聊一聊遊戲的壓測遊戲
- 你不知道的 HTTPS 壓測HTTP