<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          簡單、易用的 MySQL 官方壓測工具

          共 11605字,需瀏覽 24分鐘

           ·

          2021-01-03 20:18

          :toutiao.com/i6843323300764975628/?|?責(zé)編:樂樂

          ??? ?

          ? ?正文? ?


          一、MySQL自帶的壓力測試工具 Mysqlslap

          mysqlslap是mysql自帶的基準(zhǔn)測試工具,該工具查詢數(shù)據(jù),語法簡單,靈活容易使用.該工具可以模擬多個客戶端同時并發(fā)的向服務(wù)器發(fā)出查詢更新,給出了性能測試數(shù)據(jù)而且提供了多種引擎的性能比較。mysqlslap為mysql性能優(yōu)化前后提供了直觀的驗證依據(jù),系統(tǒng)運維和DBA人員應(yīng)該掌握一些常見的壓力測試工具,才能準(zhǔn)確的掌握線上數(shù)據(jù)庫支撐的用戶流量上限及其抗壓性等問題。

          1、更改其默認(rèn)的最大連接數(shù)

          在對MySQL進(jìn)行壓力測試之前,需要更改其默認(rèn)的最大連接數(shù),如下:

          [root@mysql?~]#?vim?/etc/my.cnf
          ................
          [mysqld]
          max_connections=1024

          [root@mysql?~]#?systemctl?restart?mysqld

          查看最大連接數(shù)

          mysql>?show?variables?like?'max_connections';
          +-----------------+-------+
          |?Variable_name???|?Value?|
          +-----------------+-------+
          |?max_connections?|?1024??|
          +-----------------+--------+
          1?row?in?set?(0.00?sec)

          進(jìn)行壓力測試:

          [root@mysql?~]#?mysqlslap?--defaults-file=/etc/my.cnf?--concurrency=100,200?--iterations=1?--number-int-cols=20?--number-char-cols=30?\

          --auto-generate-sql?--auto-generate-sql-add-autoincrement?--auto-generate-sql-load-type=mixed?--engine=myisam,innodb?--number-of-queries=2000?-uroot?-p123?--verbose

          上述命令測試說明:模擬測試兩次讀寫并發(fā),第一次100,第二次200,自動生成SQL腳本,測試表包含20個init字段,30個char字段,每次執(zhí)行2000查詢請求。測試引擎分別是myisam,innodb。(上述選項中有很多都是默認(rèn)值,可以省略,如果想要了解各個選項的解釋,可以使用mysqlslap --help進(jìn)行查詢)。

          測試結(jié)果說明:

          • Myisam第一次100客戶端同時發(fā)起增查用0.557/s,第二次200客戶端同時發(fā)起增查用0.522/s
          • Innodb第一次100客戶端同時發(fā)起增查用0.256/s,第二次200客戶端同時發(fā)起增查用0.303/s

          可以根據(jù)實際需求,一點點的加大并發(fā)數(shù)量進(jìn)行壓力測試。

          二、使用第三方sysbench工具進(jìn)行壓力測試

          1、安裝sysbench工具

          [root@mysql?~]#?yum?-y?install?epel-release?#安裝第三方epel源

          [root@mysql?~]#?yum?-y?install?sysbench?#安裝sysbench工具

          [root@mysql?~]#?sysbench?--version?#確定工具已安裝
          sysbench?1.0.17

          sysbench可以進(jìn)行以下測試:

          • CPU 運算性能測試
          • 磁盤 IO 性能測試
          • 調(diào)度程序性能測試
          • 內(nèi)存分配及傳輸速度測試
          • POSIX 線程性能測試

          數(shù)據(jù)庫性能測試(OLTP 基準(zhǔn)測試,需要通過 /usr/share/sysbench/ 目錄中的 Lua 腳本執(zhí)行,例如 oltp_read_only.lua 腳本執(zhí)行只讀測試)。

          sysbench 還可以通過運行命令時指定自己的 Lua 腳本來自定義測試。

          2、查看sysbench工具的幫助選項

          [root@mysql?~]#?sysbench?--help
          Usage:
          sysbench?[options]...?[testname]?[command]

          Commands?implemented?by?most?tests:?prepare?run?cleanup?help?#?可用的命令,四個

          General?options:?#?通用選項
          --threads=N?要使用的線程數(shù),默認(rèn)?1?個?[1]
          --events=N?最大允許的事件個數(shù)?[0]
          --time=N?最大的總執(zhí)行時間,以秒為單位?[10]
          --forced-shutdown=STRING?在?--time?時間限制到達(dá)后,強制關(guān)閉之前等待的秒數(shù),默認(rèn)“off”禁用(number?of?seconds?to?wait?after?the?--time?limit?before?forcing?shutdown,?or?'off'?to?disable)?[off]
          --thread-stack-size=SIZE?每個線程的堆棧大小?[64K]
          --rate=N 平均傳輸速率。0?則無限制?[0]
          --report-interval=N?以秒為單位定期報告具有指定間隔的中間統(tǒng)計信息?0?禁用中間報告?[0]
          --report-checkpoints=[LIST,...]?轉(zhuǎn)儲完整的統(tǒng)計信息并在指定的時間點重置所有計數(shù)器。參數(shù)是一個逗號分隔的值列表,表示從測試開始經(jīng)過這個時間量時必須執(zhí)行報告檢查點(以秒為單位)。報告檢查點默認(rèn)關(guān)閉。?[]
          --debug[=on|off]?打印更多?debug?信息?[off]
          --validate[=on|off]?盡可能執(zhí)行驗證檢查?[off]
          --help[=on|off]?顯示幫助信息并退出?[off]
          --version[=on|off]?顯示版本信息并退出?[off]
          --config-file=FILENAME?包含命令行選項的文件
          --tx-rate=N?廢棄,改用?--rate?[0]
          --max-requests=N?廢棄,改用?--events?[0]
          --max-time=N?廢棄,改用?--time?[0]
          --num-threads=N?廢棄,改用?--threads?[1]

          Pseudo-Random?Numbers?Generator?options:?#?偽隨機數(shù)發(fā)生器選項
          --rand-type=STRING?random?numbers?distribution?{uniform,gaussian,special,pareto}?[special]
          --rand-spec-iter=N?number?of?iterations?used?for?numbers?generation?[12]
          --rand-spec-pct=N?percentage?of?values?to?be?treated?as?'special'?(for?special?distribution)?[1]
          --rand-spec-res=N?percentage?of?'special'?values?to?use?(for?special?distribution)?[75]
          --rand-seed=N?seed?for?random?number?generator.?When?0,?the?current?time?is?used?as?a?RNG?seed.?[0]
          --rand-pareto-h=N?parameter?h?for?pareto?distribution?[0.2]
          Log?options:?#?日志選項
          --verbosity=N?verbosity?level?{5?-?debug,?0?-?only?critical?messages}?[3]
          --percentile=N?percentile?to?calculate?in?latency?statistics?(1-100).?Use?the?special?value?of?0?to?disable?percentile?calculations?[95]
          --histogram[=on|off]?print?latency?histogram?in?report?[off]

          General?database?options:?#?通用的數(shù)據(jù)庫選項
          --db-driver=STRING?指定要使用的數(shù)據(jù)庫驅(qū)動程序?('help'?to?get?list?of?available?drivers)
          --db-ps-mode=STRING?prepared?statements?usage?mode?{auto,?disable}?[auto]

          --db-debug[=on|off]?print?database-specific?debug?information?[off]
          Compiled-in?database?drivers:?#?內(nèi)建的數(shù)據(jù)庫驅(qū)動程序,默認(rèn)支持?MySQL?和?PostgreSQL
          mysql?-?MySQL?driver
          pgsql?-?PostgreSQL?driver

          mysql?options:?#?MySQL?數(shù)據(jù)庫專用選項
          --mysql-host=[LIST,...]?MySQL?server?host?[localhost]
          --mysql-port=[LIST,...]?MySQL?server?port?[3306]
          --mysql-socket=[LIST,...]?MySQL?socket
          --mysql-user=STRING?MySQL?user?[sbtest]
          --mysql-password=STRING?MySQL?password?[]
          --mysql-db=STRING?MySQL?database?name?[sbtest]
          --mysql-ssl[=on|off]?use?SSL?connections,?if?available?in?the?client?library?[off]
          --mysql-ssl-cipher=STRING?use?specific?cipher?for?SSL?connections?[]
          --mysql-compression[=on|off]?use?compression,?if?available?in?the?client?library?[off]
          --mysql-debug[=on|off]?trace?all?client?library?calls?[off]
          --mysql-ignore-errors=[LIST,...]?list?of?errors?to?ignore,?or?"all"?[1213,1020,1205]
          --mysql-dry-run[=on|off]?Dry?run,?pretend?that?all?MySQL?client?API?calls?are?successful?without?executing?them?[off]

          pgsql?options:?#?PostgreSQL?數(shù)據(jù)庫專用選項
          --pgsql-host=STRING?PostgreSQL?server?host?[localhost]
          --pgsql-port=N?PostgreSQL?server?port?[5432]
          --pgsql-user=STRING?PostgreSQL?user?[sbtest]
          --pgsql-password=STRING?PostgreSQL?password?[]
          --pgsql-db=STRING?PostgreSQL?database?name?[sbtest]

          Compiled-in?tests:?#?內(nèi)建測試類型
          fileio?-?File?I/O?test
          cpu?-?CPU?performance?test
          memory?-?Memory?functions?speed?test
          threads?-?Threads?subsystem?performance?test
          mutex?-?Mutex?performance?test

          See?'sysbench??help'?for?a?list?of?options?for?each?test.

          3、sysbench測試MySQL數(shù)據(jù)庫性能

          在公眾號程序員小樂回復(fù)“offer”,獲取算法面試題和答案驚喜禮包。

          1)準(zhǔn)備測試數(shù)據(jù)

          #查看sysbench自帶的lua腳本使用方法
          [root@mysql?~]#?sysbench?/usr/share/sysbench/oltp_common.lua?help

          #必須創(chuàng)建sbtest庫,sbtest是sysbench默認(rèn)使用的庫名
          [root@mysql?~]#?mysqladmin?-uroot?-p123?create?sbtest;

          #然后,準(zhǔn)備測試所用的表,這些測試表放在測試庫sbtest中。這里使用的lua腳本為/usr/share/sysbench/oltp_common.lua。
          [root@mysql?~]#?sysbench?--mysql-host=127.0.0.1?\
          --mysql-port=3306?\
          --mysql-user=root?\
          --mysql-password=123?\
          /usr/share/sysbench/oltp_common.lua?\
          --tables=10?\
          --table_size=100000?\
          prepare

          #其中--tables=10表示創(chuàng)建10個測試表,
          #--table_size=100000表示每個表中插入10W行數(shù)據(jù),
          #prepare表示這是準(zhǔn)備數(shù)的過程。

          2)確認(rèn)測試數(shù)據(jù)以存在

          [root@mysql?~]#?mysql?-uroot?-p123?sbtest;?#登錄到sbtest庫

          mysql>?show?tables;?#查看相應(yīng)的表
          +------------------+
          |?Tables_in_sbtest?|
          +------------------+
          |?sbtest1?|
          |?sbtest10?|
          |?sbtest2?|
          |?sbtest3?|
          |?sbtest4?|
          |?sbtest5?|
          |?sbtest6?|
          |?sbtest7?|
          |?sbtest8?|
          |?sbtest9?|
          +------------------+
          10?rows?in?set?(0.00?sec)
          mysql>?select?count(*)?from?sbtest1;?#隨機選擇一個表,確認(rèn)其有100000條數(shù)據(jù)
          +----------+
          |?count(*)?|
          +----------+
          |?100000?|
          +----------+
          1?row?in?set?(0.01?sec)

          3)數(shù)據(jù)庫測試和結(jié)果分析

          稍微修改下之前準(zhǔn)備數(shù)據(jù)的語句,就可以拿來測試了。需要注意的是,之前使用的lua腳本為oltp_common.lua,它是一個通用腳本,是被其它lua腳本調(diào)用的,它不能直接拿來測試。

          所以,我這里用oltp_read_write.lua腳本來做讀、寫測試。還有很多其它類型的測試,比如只讀測試、只寫測試、刪除測試、大批量插入測試等等。可找到對應(yīng)的lua腳本進(jìn)行調(diào)用即可。

          #執(zhí)行測試命令如下:
          [root@mysql?~]#?sysbench?--threads=4?\
          --time=20?\
          --report-interval=5?\
          --mysql-host=127.0.0.1?\
          --mysql-port=3306?\
          --mysql-user=root?\
          --mysql-password=123?\
          /usr/share/sysbench/oltp_read_write.lua?\
          --tables=10?\
          --table_size=100000?\
          run

          上述命令返回的結(jié)果如下:

          [root@mysql?~]#?sysbench?--threads=4?--time=20?--report-interval=5?--mysql-host=127.0.0.1?--mysql-port=3306?--mysql-user=root?--mysql-password=123?/usr/share/sysbench/oltp_read_write.lua?--tables=10?--table_size=100000?run

          sysbench?1.0.17?(using?system?LuaJIT?2.0.4)
          Running?the?test?with?following?options:
          Number?of?threads:?4
          Report?intermediate?results?every?5?second(s)
          Initializing?random?number?generator?from?current?time
          Initializing?worker?threads...
          Threads?started!

          #以下是每5秒返回一次的結(jié)果,統(tǒng)計的指標(biāo)包括:
          #?線程數(shù)、tps(每秒事務(wù)數(shù))、qps(每秒查詢數(shù))、
          #?每秒的讀/寫/其它次數(shù)、延遲、每秒錯誤數(shù)、每秒重連次數(shù)
          [?5s?]?thds:?4?tps:?1040.21?qps:?20815.65?(r/w/o:?14573.17/4161.25/2081.22)?lat?(ms,95%):?7.17?err/s:?0.00?reconn/s:?0.00
          [?10s?]?thds:?4?tps:?1083.34?qps:?21667.15?(r/w/o:?15165.93/4334.55/2166.68)?lat?(ms,95%):?6.55?err/s:?0.00?reconn/s:?0.00
          [?15s?]?thds:?4?tps:?1121.57?qps:?22429.09?(r/w/o:?15700.64/4485.30/2243.15)?lat?(ms,95%):?6.55?err/s:?0.00?reconn/s:?0.00
          [?20s?]?thds:?4?tps:?1141.69?qps:?22831.98?(r/w/o:?15982.65/4566.16/2283.18)?lat?(ms,95%):?6.09?err/s:?0.00?reconn/s:?0.00

          SQL?statistics:

          queries?performed:
          read:?307146?#?執(zhí)行的讀操作數(shù)量
          write:?87756?#?執(zhí)行的寫操作數(shù)量
          other:?43878?#?執(zhí)行的其它操作數(shù)量

          total:?438780
          transactions:?21939?(1096.57?per?sec.)?#?執(zhí)行事務(wù)的平均速率
          queries:?438780?(21931.37?per?sec.)?#?平均每秒能執(zhí)行多少次查詢
          ignored?errors:?0?(0.00?per?sec.)
          reconnects:?0?(0.00?per?sec.)

          General?statistics:
          total?time:?20.0055s?#?總消耗時間
          total?number?of?events:?21939?#?總請求數(shù)量(讀、寫、其它)

          Latency?(ms):
          min:?1.39
          avg:?3.64
          max:?192.05
          95th?percentile:?6.67?#?采樣計算的平均延遲
          sum:?79964.26

          Threads?fairness:
          events?(avg/stddev):?5484.7500/15.12
          execution?time?(avg/stddev):?19.9911/0.00

          4、cpu/io/內(nèi)存等測試

          sysbench內(nèi)置的幾個測試指標(biāo)如下:

          [root@mysql?~]#?sysbench?--help
          ..........?#?省略部分內(nèi)容
          Compiled-in?tests:
          fileio?-?File?I/O?test
          cpu?-?CPU?performance?test
          memory?-?Memory?functions?speed?test
          threads?-?Threads?subsystem?performance?test
          mutex?-?Mutex?performance?test

          可以直接help輸出測試方法,例如,fileio測試:

          [root@mysql?~]#?sysbench?fileio?help
          sysbench?1.0.17?(using?system?LuaJIT?2.0.4)

          fileio?options:
          --file-num=N?number?of?files?to?create?[128]
          --file-block-size=N?block?size?to?use?in?all?IO?operations?[16384]
          --file-total-size=SIZE?total?size?of?files?to?create?[2G]
          --file-test-mode=STRING?test?mode?{seqwr,?seqrewr,?seqrd,?rndrd,?rndwr,?rndrw}
          --file-io-mode=STRING?file?operations?mode?{sync,async,mmap}?[sync]
          --file-async-backlog=N?number?of?asynchronous?operatons?to?queue?per?thread?[128]
          --file-extra-flags=[LIST,...]?list?of?additional?flags?to?use?to?open?files?{sync,dsync,direct}?[]
          --file-fsync-freq=N?do?fsync()?after?this?number?of?requests?(0?-?don't?use?fsync())?[100]
          --file-fsync-all[=on|off]?do?fsync()?after?each?write?operation?[off]
          --file-fsync-end[=on|off]?do?fsync()?at?the?end?of?test?[on]
          --file-fsync-mode=STRING?which?method?to?use?for?synchronization?{fsync,?fdatasync}?[fsync]
          --file-merged-requests=N?merge?at?most?this?number?of?IO?requests?if?possible?(0?-?don'
          t?merge)?[0]
          --file-rw-ratio=N?reads/writes?ratio?for?combined?test?[1.5]

          1)測試io性能

          例如,創(chuàng)建5個文件,總共2G,每個文件大概400M。

          在公眾號程序員小樂回復(fù)“Java”,獲取Java面試題和答案驚喜禮包。

          [root@mysql?~]#?sysbench?fileio?--file-num=5?--file-total-size=2G?prepare
          [root@mysql?~]#?ll?-lh?test*
          -rw-------?1?root?root?410M?May?26?16:05?test_file.0
          -rw-------?1?root?root?410M?May?26?16:05?test_file.1
          -rw-------?1?root?root?410M?May?26?16:05?test_file.2
          -rw-------?1?root?root?410M?May?26?16:05?test_file.3
          -rw-------?1?root?root?410M?May?26?16:05?test_file.4

          然后運行測試:

          [root@mysql?~]#?sysbench?--events=5000?\
          --threads=16?\
          fileio?\
          --file-num=5?\
          --file-total-size=2G?\
          --file-test-mode=rndrw?\
          --file-fsync-freq=0?\
          --file-block-size=16384?\
          run

          返回的結(jié)果如下:

          Running?the?test?with?following?options:
          Number?of?threads:?16
          Initializing?random?number?generator?from?current?time
          Extra?file?open?flags:?(none)
          5?files,?409.6MiB?each
          2GiB?total?file?size
          Block?size?16KiB
          Number?of?IO?requests:?5000
          Read/Write?ratio?for?combined?random?IO?test:?1.50
          Calling?fsync()?at?the?end?of?test,?Enabled.
          Using?synchronous?I/O?mode
          Doing?random?r/w?test
          Initializing?worker?threads...

          Threads?started!

          File?operations:
          reads/s:?9899.03
          writes/s:?6621.38
          fsyncs/s:?264.33
          Throughput:?#?吞吐量
          read,?MiB/s:?154.66?#表示讀帶寬
          written,?MiB/s:?103.46?#表示寫的帶寬

          General?statistics:
          total?time:?0.3014s
          total?number?of?events:?5000

          Latency?(ms):
          min:?0.00
          avg:?0.81
          max:?53.56
          95th?percentile:?4.10
          sum:?4030.48

          Threads?fairness:
          events?(avg/stddev):?312.5000/27.64
          execution?time?(avg/stddev):?0.2519/0.02

          2)測試cpu性能

          [root@mysql?~]#?sysbench?cpu?--threads=40?--events=10000?--cpu-max-prime=20000?run

          壓測時,還請小心謹(jǐn)慎!!!!

          PS:歡迎在留言區(qū)留下你的觀點,一起討論提高。如果今天的文章讓你有新的啟發(fā),歡迎轉(zhuǎn)發(fā)分享給更多人。


          Java后端編程交流群已成立


          公眾號運營至今,離不開小伙伴們的支持。為了給小伙伴們提供一個互相交流的平臺,特地開通了官方交流群。掃描下方二維碼備注 進(jìn)群 或者關(guān)注公眾號 Java后端編程 后獲取進(jìn)群通道。



          —————END—————


          推薦閱讀:



          最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點“在看”,關(guān)注公眾號并回復(fù)?666?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          明天見(??ω??)??
          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲黄色精品视频 | 青青草黄视频 | 一级操逼毛片 | 天天操中文字幕 | 亚洲国产午夜在线电影网站 |