日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql 压力测试知乎_MySQL查看SQL语句执行效率和mysql几种性能测试的工具

發(fā)布時(shí)間:2025/3/11 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 压力测试知乎_MySQL查看SQL语句执行效率和mysql几种性能测试的工具 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

網(wǎng)絡(luò)中整理,記錄下,朋友們應(yīng)該用得到!

Explain命令在解決數(shù)據(jù)庫(kù)性能上是第一推薦使用命令,大部分的性能問(wèn)題可以通過(guò)此命令來(lái)簡(jiǎn)單的解決,Explain可以用來(lái)查看 SQL 語(yǔ)句的執(zhí)行效 果,可以幫助選擇更好的索引和優(yōu)化查詢(xún)語(yǔ)句,寫(xiě)出更好的優(yōu)化語(yǔ)句。

Explain語(yǔ)法:explain select … from … [where ...]

例如:explain select * from news;

輸出:

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

下面對(duì)各個(gè)屬性進(jìn)行了解:

1、id:這是SELECT的查詢(xún)序列號(hào)

2、select_type:select_type就是select的類(lèi)型,可以有以下幾種:

SIMPLE:簡(jiǎn)單SELECT(不使用UNION或子查詢(xún)等)

PRIMARY:最外面的SELECT

UNION:UNION中的第二個(gè)或后面的SELECT語(yǔ)句

DEPENDENT UNION:UNION中的第二個(gè)或后面的SELECT語(yǔ)句,取決于外面的查詢(xún)

UNION RESULT:UNION的結(jié)果。

SUBQUERY:子查詢(xún)中的第一個(gè)SELECT

DEPENDENT SUBQUERY:子查詢(xún)中的第一個(gè)SELECT,取決于外面的查詢(xún)

DERIVED:導(dǎo)出表的SELECT(FROM子句的子查詢(xún))

3、table:顯示這一行的數(shù)據(jù)是關(guān)于哪張表的

4、type:這列最重要,顯示了連接使用了哪種類(lèi)別,有無(wú)使用索引,是使用Explain命令分析性能瓶頸的關(guān)鍵項(xiàng)之一。

結(jié)果值從好到壞依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般來(lái)說(shuō),得保證查詢(xún)至少達(dá)到range級(jí)別,最好能達(dá)到ref,否則就可能會(huì)出現(xiàn)性能問(wèn)題。

5、possible_keys:列指出MySQL能使用哪個(gè)索引在該表中找到行

6、key:顯示MySQL實(shí)際決定使用的鍵(索引)。如果沒(méi)有選擇索引,鍵是NULL

7、key_len:顯示MySQL決定使用的鍵長(zhǎng)度。如果鍵是NULL,則長(zhǎng)度為NULL。使用的索引的長(zhǎng)度。在不損失精確性的情況下,長(zhǎng)度越短越好

8、ref:顯示使用哪個(gè)列或常數(shù)與key一起從表中選擇行。

9、rows:顯示MySQL認(rèn)為它執(zhí)行查詢(xún)時(shí)必須檢查的行數(shù)。

10、Extra:包含MySQL解決查詢(xún)的詳細(xì)信息,也是關(guān)鍵參考項(xiàng)之一。

Distinct

一旦MYSQL找到了與行相聯(lián)合匹配的行,就不再搜索了

Not exists

MYSQL 優(yōu)化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標(biāo)準(zhǔn)的行,

就不再搜索了

Range checked for each

Record(index map:#)

沒(méi)有找到理想的索引,因此對(duì)于從前面表中來(lái)的每一 個(gè)行組合,MYSQL檢查使用哪個(gè)索引,并用它來(lái)從表中返回行。這是使用索引的最慢的連接之一

Using filesort

看 到這個(gè)的時(shí)候,查詢(xún)就需要優(yōu)化了。MYSQL需要進(jìn)行額外的步驟來(lái)發(fā)現(xiàn)如何對(duì)返回的行排序。它根據(jù)連接類(lèi)型以及存儲(chǔ)排序鍵值和匹配條件的全部行的行指針來(lái) 排序全部行

Using index

列數(shù)據(jù)是從僅僅使用了索引中的信息而沒(méi)有讀取實(shí)際的行動(dòng)的表返回的,這發(fā)生在對(duì)表 的全部的請(qǐng)求列都是同一個(gè)索引的部分的時(shí)候

Using temporary

看到這個(gè)的時(shí)候,查詢(xún)需要優(yōu)化了。這 里,MYSQL需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表來(lái)存儲(chǔ)結(jié)果,這通常發(fā)生在對(duì)不同的列集進(jìn)行ORDER BY上,而不是GROUP BY上

Using where使用了WHERE從句來(lái)限制哪些行將與下一張表匹配或者是返回給用戶(hù)。如果不想返回表中的全部行,并且連接類(lèi)型ALL或index, 這就會(huì)發(fā)生,或者是查詢(xún)有問(wèn)題

mysql幾種性能測(cè)試的工具使用

一、mysqlslap

安裝:裝了mysql就有了

作用:模擬并發(fā)測(cè)試數(shù)據(jù)庫(kù)性能。

優(yōu)點(diǎn):簡(jiǎn)單,容易使用。

不足:不能指定生成的數(shù)據(jù)規(guī)模,測(cè)試過(guò)程不清楚針對(duì)十萬(wàn)級(jí)還是百萬(wàn)級(jí)數(shù)據(jù)做的測(cè)試,感覺(jué)不太適合做綜合測(cè)試,比較適合針對(duì)既有數(shù)據(jù)庫(kù),對(duì)單個(gè)sql進(jìn)行優(yōu)化的測(cè)試。

使用方法:

可以使用mysqlslap --help來(lái)顯示使用方法:

Default options are read from the following files in the given order:

/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

--engines:代表要測(cè)試的引擎,可以有多個(gè),用分隔符隔開(kāi)。

--iterations:代表要運(yùn)行這些測(cè)試多少次。

--auto-generate-sql :代表用系統(tǒng)自己生成的SQL腳本來(lái)測(cè)試。

--auto-generate-sql-load-type: 代表要測(cè)試的是讀還是寫(xiě)還是兩者混合的(read,write,update,mixed)

--number-of-queries:代表總共要運(yùn)行多少次查詢(xún)。每個(gè)客戶(hù)運(yùn)行的查詢(xún)數(shù)量可以用查詢(xún)總數(shù)/并發(fā)數(shù)來(lái)計(jì)算。

--debug-info 代表要額外輸出CPU以及內(nèi)存的相關(guān)信息。

--number-int-cols :創(chuàng)建測(cè)試表的 int 型字段數(shù)量

--auto-generate-sql-add-autoincrement : 代表對(duì)生成的表自動(dòng)添加auto_increment列,從5.1.18版本開(kāi)始

--number-char-cols 創(chuàng)建測(cè)試表的 char 型字段數(shù)量。

--create-schema 測(cè)試的schema,MySQL中schema也就是database。

--query 使用自定義腳本執(zhí)行測(cè)試,例如可以調(diào)用自定義的一個(gè)存儲(chǔ)過(guò)程或者sql語(yǔ)句來(lái)執(zhí)行測(cè)試。

--only-print 如果只想打印看看SQL語(yǔ)句是什么,可以用這個(gè)選項(xiàng)。

mysqlslap -u root -p --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam --number-of-queries=10

或:

指定數(shù)據(jù)庫(kù)和sql語(yǔ)句:

mysqlslap -h localhost -P 123456 --concurrency=100 --iterations=1 --create-schema='mysql' --query='select * from user;' --number-of-queries=10 -u root -p

要是看到底做了什么可以加上:--only-print

Benchmark

Average number of seconds to run all queries: 25.225 seconds

Minimum number of seconds to run all queries: 25.225 seconds

Maximum number of seconds to run all queries: 25.225 seconds

Number of clients running queries: 100

Average number of queries per client: 0

以上表明100個(gè)客戶(hù)端同時(shí)運(yùn)行要25秒

再如:

mysqlslap -uroot -p123456 --concurrency=100 --iterations=1 --engine=myisam --create-schema='haodingdan112' --query='select * From order_boxing_transit where id = 10' --number-of-queries=1 --debug-info

二、sysbench

安裝:

tar zxf sysbench-0.4.12.tar.gz

cd sysbench-0.4.12

./autogen.sh

./configure && make && make install

strip /usr/local/bin/sysbench

1.如果mysql不是默認(rèn)路徑安裝,那么需要通過(guò)指定--with-mysql-includes和--with-mysql-libs參數(shù)來(lái)加載mysql安裝路徑

2.如果報(bào)錯(cuò):

../libtool: line 838: X--tag=CC: command not found

../libtool: line 871: libtool: ignoring unknown tag : command not found

../libtool: line 838: X--mode=link: command not found

../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found

../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found

../libtool: line 2231: X-g: command not found

../libtool: line 2231: X-O2: command not found

那么執(zhí)行下根目錄的:autogen.sh文件,然后重新configure && make && make install

3.如果報(bào)錯(cuò):

sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

那么執(zhí)行下:

ln -s /usr/local/mysql5.5/mysql/lib/libmysqlclient.so.18 /usr/lib64/

4.如果執(zhí)行autogen.sh時(shí),報(bào)如下錯(cuò)誤:

./autogen.sh: line 3: aclocal: command not found

那么需要安裝一個(gè)軟件:

yum install automake

然后需要增加一個(gè)參數(shù):查找: AC_PROG_LIBTOOL 將其注釋,然后增加AC_PROG_RANLIB

作用:模擬并發(fā),可以執(zhí)行CPU/內(nèi)存/線程/IO/數(shù)據(jù)庫(kù)等方面的性能測(cè)試。數(shù)據(jù)庫(kù)目前支持MySQL/Oracle/PostgreSQL

優(yōu)點(diǎn):可以指定測(cè)試數(shù)據(jù)的規(guī)模,可以單獨(dú)測(cè)試讀、寫(xiě)的性能,也可以測(cè)試讀寫(xiě)混合的性能。

不足:測(cè)試的時(shí)候,由于網(wǎng)絡(luò)原因,測(cè)試的非常慢,但是最終給的結(jié)果卻很好,并發(fā)支持很高,所以給我的感覺(jué)是并不太準(zhǔn)確。當(dāng)然也可能我沒(méi)搞明白原理

使用方法:

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

sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=400000 --mysql-db=dbtest2 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd prepare

執(zhí)行測(cè)試

sysbench --num-threads=100 --max-requests=4000 --test=oltp --mysql-table-engine=innodb --oltp-table-size=400000 --mysql-db=dbtest1 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd run

sysbench 0.4.12: multi-threaded system evaluation benchmark

No DB drivers specified, using mysql

Running the test with following options:

Number of threads: 100

Doing OLTP test.

Running mixed OLTP test

Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)

Using "BEGIN" for starting transactions

Using auto_inc on the id column

Maximum number of requests for OLTP test is limited to 4000

Threads started!

Done.

OLTP test statistics:

queries performed:

read: 56014

write: 20005

other: 8002

total: 84021

transactions: 4001 (259.14 per sec.)

deadlocks: 0 (0.00 per sec.)

read/write requests: 76019 (4923.75 per sec.)

other operations: 8002 (518.29 per sec.)

Test execution summary:

total time: 15.4393s

total number of events: 4001

total time taken by event execution: 1504.7744

per-request statistics:

min: 33.45ms

avg: 376.10ms

max: 861.53ms

approx. 95 percentile: 505.65ms

Threads fairness:

events (avg/stddev): 40.0100/0.67

execution time (avg/stddev): 15.0477/0.22

三、tpcc-mysql

安裝:

export C_INCLUDE_PATH=/usr/include/mysql

export PATH=/usr/bin:$PATH

export LD_LIBRARY_PATH=/usr/lib/mysql

cd /tmp/tpcc/src

make

然后就會(huì)在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start

作用:測(cè)試mysql數(shù)據(jù)庫(kù)的整體性能

優(yōu)點(diǎn):符合tpcc標(biāo)準(zhǔn),有標(biāo)準(zhǔn)的方法,模擬真實(shí)的交易活動(dòng),結(jié)果比較可靠。

不足:不能單獨(dú)測(cè)試讀或者寫(xiě)的性能,對(duì)于一些以查詢(xún)?yōu)橹骰蛘咧粚?xiě)的應(yīng)用,就沒(méi)有這么大的意義了。

使用方法:

加載數(shù)據(jù)

創(chuàng)建庫(kù)

mysql>create database tpcc10;

創(chuàng)建表:

shell>mysql tpcc10 < create_table.sql

添加外鍵:

shell>mysql tpcc10 < add_fkey_idx.sql

加載數(shù)據(jù):

1、單進(jìn)程加載:

shell>./tpcc_load 192.168.11.172 tpcc10 root pwd 300

|主機(jī)||數(shù)據(jù)庫(kù)||用戶(hù)||密碼||warehouse|

2、并發(fā)加載:(推薦,但需要修改一下)

shell>./load.sh tpcc300 300

|數(shù)據(jù)庫(kù)||warehouse|

3、測(cè)試

./tpcc_start -h192.168.11.172 -d tpcc -u root -p 'pwd' -w 10 -c 10 -r 10 -l 60 -i 10 -f /mnt/hgfs/mysql/tpcc100_2013522.txt

***************************************

*** ###easy### TPC-C Load Generator ***

***************************************

option h with value '192.168.11.172'

option d with value 'tpcc'

option u with value 'root'

option p with value 'pwd'

option w with value '1'

option c with value '100'

option r with value '120'

option l with value '60'

option i with value '10'

option f with value '/mnt/hgfs/mysql/tpcc100_2013522.txt'

[server]: 192.168.11.172

[port]: 3306

[DBname]: tpcc

[user]: root

[pass]: pwd

[warehouse]: 1

[connection]: 100

[rampup]: 120 (sec.)

[measure]: 60 (sec.)

RAMP-UP TIME.(120 sec.)

MEASURING START.

10, 245(77):10.923|28.902, 242(0):3.677|10.796, 25(0):1.579|2.198, 24(0):17.451|21.047, 25(4):19.999|33.776

20, 262(75):9.070|11.917, 263(0):3.407|4.716, 26(0):1.608|1.776, 27(0):11.347|16.408, 26(1):19.166|21.018

30, 247(90):11.130|14.131, 241(0):2.367|2.654, 24(0):0.960|1.095, 24(0):9.308|16.538, 25(3):19.999|24.874

40, 237(69):11.840|13.009, 239(1):3.638|7.245, 24(0):0.692|0.773, 23(0):8.756|10.456, 23(1):19.527|20.495

50, 252(69):10.548|17.925, 256(0):2.652|2.893, 26(0):1.177|3.579, 27(0):14.648|15.018, 25(4):19.999|26.398

60, 256(78):9.323|11.328, 251(1):3.895|5.380, 25(0):0.785|1.542, 25(0):11.382|15.829, 26(0):18.481|18.855

STOPPING THREADS....................................................................................................

[0] sc:1041 lt:458 rt:0 fl:0

[1] sc:1490 lt:2 rt:0 fl:0

[2] sc:150 lt:0 rt:0 fl:0

[3] sc:150 lt:0 rt:0 fl:0

[4] sc:137 lt:13 rt:0 fl:0

in 60 sec.

[0] sc:1041 lt:458 rt:0 fl:0

[1] sc:1490 lt:2 rt:0 fl:0

[2] sc:150 lt:0 rt:0 fl:0

[3] sc:150 lt:0 rt:0 fl:0

[4] sc:137 lt:13 rt:0 fl:0

(all must be [OK])

[transaction percentage]

Payment: 43.36% (>=43.0%) [OK]

Order-Status: 4.36% (>= 4.0%) [OK]

Delivery: 4.36% (>= 4.0%) [OK]

Stock-Level: 4.36% (>= 4.0%) [OK]

[response time (at least 90% passed)]

New-Order: 69.45% [NG] *

Payment: 99.87% [OK]

Order-Status: 100.00% [OK]

Delivery: 100.00% [OK]

Stock-Level: 91.33% [OK]

1499.000 TpmC

這里把測(cè)試用例介紹貼一下

TPC-C測(cè)試用到的模型是一個(gè)大型的商品批發(fā)銷(xiāo)售公司,它擁有若干個(gè)分布在不同區(qū)域的商品倉(cāng)庫(kù)。當(dāng)業(yè)務(wù)擴(kuò)展的時(shí)候,公司將添加新的倉(cāng)庫(kù)。

每個(gè)倉(cāng)庫(kù)負(fù)責(zé)為10個(gè)銷(xiāo)售點(diǎn)供貨,其中每個(gè)銷(xiāo)售點(diǎn)為3000個(gè)客戶(hù)提供服務(wù),每個(gè)客戶(hù)提交的訂單中,平均每個(gè)訂單有10項(xiàng)產(chǎn)品,

所有訂單中約1%的產(chǎn)品在其直接所屬的倉(cāng)庫(kù)中沒(méi)有存貨,必須由其他區(qū)域的倉(cāng)庫(kù)來(lái)供貨。同時(shí),每個(gè)倉(cāng)庫(kù)都要維護(hù)公司銷(xiāo)售的100000種商品的庫(kù)存記錄。

四、 The MySQL Benchmark Suite

這個(gè)測(cè)試工具是隨著MySQL綁定發(fā)行的,基于Perl語(yǔ)言和其中的兩個(gè)模塊:DBI和Benchmark。如果有需要,它支持所有支持DBI驅(qū)動(dòng)的數(shù)據(jù)庫(kù)。可以通過(guò)修改bench-init.pl的選項(xiàng)以符合需要。另外提醒的是,它不支持多CPU。

進(jìn)行測(cè)試時(shí),執(zhí)行run-all-tests腳本,具體的命令選項(xiàng)請(qǐng)看README。

五、 MySQL super-smack

這是一個(gè)強(qiáng)大的廣受贊譽(yù)的壓力測(cè)試工具,支持MySQL和PostgreSQL。

安裝很簡(jiǎn)單,請(qǐng)先仔細(xì)閱讀目錄里的指導(dǎo)文件。

Preparing test data

做測(cè)試時(shí),最好用自己的數(shù)據(jù)。因?yàn)槭褂谜鎸?shí)的數(shù)據(jù),使測(cè)試變得接近現(xiàn)實(shí)和客觀。

Configuration

smack的文件設(shè)置,看起來(lái)很簡(jiǎn)單。

六、MyBench: A Home-Grown Solution

MyBench一種基于Perl語(yǔ)言易于擴(kuò)展的測(cè)試工具。

總結(jié)

以上是生活随笔為你收集整理的mysql 压力测试知乎_MySQL查看SQL语句执行效率和mysql几种性能测试的工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。