Mysql-性能分析-Profiling

Mysql-性能分析-Profiling,第1张

Show Profile 是mysql提供可以用来分析 当前会话 中语句执行的资源消耗情况,可以用于Sql调优的测量。

请读者继续看前面的图 SQL执行具体细节 ,左边 Status 列展示了一条SQL执行的从开始到清理的整个生命周期中执行的 *** 作。如果在其生命周期阶段出现如下的情况的就要重视了:

开启 Profiling 后,mysql会留下15条最近执行的sql的 现场 , 便于我们发现问题。

Show profiles 用来查最近的15条。

Show profile 用来展示每一个SQL执行阶段的耗时清单,便于我们发现耗时最多的地方,然后以此为依据查找问题所在,最后优化SQL或者优化mysql参数。比如耗时清单创建了临时表,就要考虑表是否创建索引,如果创建了那么是否没有用到或者失效了。

总的来说 Profiling 是一个很不错的mysql性能分析工具。

1、mysqlslap

安装:简单,装了mysql就有了

作用:模拟并发测试数据库性能。

优点:简单,容易使用。

不足:不能指定生成的数据规模,测试过程不清楚针对十万级还是百万级数据做的测试,感觉不太适合做综合测试,比较适合针对既有数据库,对单个sql进行优化的测试。

使用方法:

可以使用mysqlslap --help来显示使用方法:

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

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

--concurrency代表并发数量,多个可以用逗号隔开,concurrency=10,50,100, 并发连接线程数分别是10、50、100个并发。

--engines代表要测试的引擎,可以有多个,用分隔符隔开。

--iterations代表要运行这些测试多少次。

--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。

--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)

--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。

--debug-info 代表要额外输出CPU以及内存的相关信息。

--number-int-cols :创建测试表的 int 型字段数量

--auto-generate-sql-add-autoincrement : 代表对生成的表自动添加auto_increment列,从5.1.18版本开始

--number-char-cols 创建测试表的 char 型字段数量。

--create-schema 测试的schema,MySQL中schema也就是database。

--query 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。

--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。

mysqlslap -umysql -p123 --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam --number-of-queries=10 --debug-info

或:

指定数据库和sql语句:

mysqlslap -h192.168.3.18 -P4040 --concurrency=100 --iterations=1 --create-schema='test' --query='select * from test' --number-of-queries=10 --debug-info -umysql -p123

要是看到底做了什么可以加上:--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个客户端同时运行要25秒

2、sysbench

安装:

可以从http://sourceforge.net/projects/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

安装时候可能会报错,后来baidu发现个好文 http://blog.csdn.net/icelemon1314/article/details/7004955 怕以后找不到,也贴过来吧

1.如果mysql不是默认路径安装,那么需要通过指定--with-mysql-includes和--with-mysql-libs参数来加载mysql安装路径

2.如果报错:

../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

那么执行下根目录的:autogen.sh文件,然后重新configure &&make &&make install

3.如果报错:

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

那么执行下:

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

4.如果执行autogen.sh时,报如下错误:

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

那么需要安装一个软件:

yum install automake

然后需要增加一个参数:查找: AC_PROG_LIBTOOL 将其注释,然后增加AC_PROG_RANLIB

作用:模拟并发,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL

优点:可以指定测试数据的规模,可以单独测试读、写的性能,也可以测试读写混合的性能。

不足:测试的时候,由于网络原因,测试的非常慢,但是最终给的结果却很好,并发支持很高,所以给我的感觉是并不太准确。当然也可能我没搞明白原理

使用方法:

准备数据

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

执行测试

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

3、tpcc-mysql

安装:

如果从原网站上下载源码比较麻烦,需要工具、注册、生成证书等。这里提供一个下载包http://blog.chinaunix.net/blog/downLoad/fileid/8532.html

export C_INCLUDE_PATH=/usr/include/mysql

export PATH=/usr/bin:$PATH

export LD_LIBRARY_PATH=/usr/lib/mysql

cd /tmp/tpcc/src

make

然后就会在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start

作用:测试mysql数据库的整体性能

优点:符合tpcc标准,有标准的方法,模拟真实的交易活动,结果比较可靠。

不足:不能单独测试读或者写的性能,对于一些以查询为主或者只写的应用,就没有这么大的意义了。

使用方法:

加载数据

创建库

mysql>create database tpcc10

创建表:

shell>mysql tpcc10 <create_table.sql

添加外键:

shell>mysql tpcc10 <add_fkey_idx.sql

加载数据:

1、单进程加载:

shell>./tpcc_load 192.168.11.172 tpcc10 root pwd 300

|主机||数据库||用户||密码||warehouse|

2、并发加载:(推荐,但需要修改一下)

shell>./load.sh tpcc300 300

|数据库||warehouse|

3、测试

./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'

<Parameters>

[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.

云时代,最好用的MySQL客户端工具推荐

MySQL是当今最受欢迎的关系型数据库。使用图形客户端(GUI)工具,可以大大帮助开发者提升SQL编写与SQL开发的效率。在云时代,企业越来越多的开始采用RDS MySQL,同时也还有部分本地IDC自建数据库,而在云端也会选择/尝试多个不同云厂商。“工欲善其事,必先利其器”,在这样的背景下,看看有哪些工具产品可供选择吧。

本文完整对比了12种MySQL图形客户端(GUI)工具,从产品体验、功能完整度、云适配、计费模式、OS兼容性等多个角度进行评估与分析,给出推荐。下面产品推荐与整体得分图,读者可根据自己的实际情况选择。

NineData:

是一款非常有特色的数据库SQL开发产品,对MySQL常用功能支持非常完整,包括智能的SQL补全、SQL执行历史、结果集编辑、数据对比、结构对比、数据迁移与复制等。它采用SaaS架构模式,用户不仅可以免费使用,而且无需下载安装,上手比较简单。NineData产品更新迭代比较敏捷,对于开发者的新需求响应比较迅速。另外,该产品在多云适配上是其重要的强项,支持多种连接和访问云数据库的方式,对阿里云、腾讯云、华为云、AWS等都有比较好的支持。另外,也适配国内比较流行的PolarDB、GaussDB、TDSQL等数据库。对于新用户NineData还会赠送两个示例数据库,供用户使用。另外,NineData还提供了企业级SQL开发能力,支持多用户管理、数据库访问权限控制、变更流程、SQL规范、SQL与 *** 作审计等内容,可以较好的解决企业内多人协作访问数据库的问题。

Navicat:

是一款来自香港的产品,约2000年左右发布,是一个老牌的商业化、闭源数据库管理软件,支持主流的Windows、Mac OS X以及Linux,最近两年开始支持订阅模式,个人使用价格约35美元/月,企业版约69美元/月(参考),国内购买为273元/月,有一定的价格门槛,但其使用体验也还不错,功能也比较完整,包括比较强大的SQL补全、导入导出、结果集编辑、E-R模型、数据对比、结构对比、数据迁移等,但有部分功能仅企业版才具备。Navicat的代码块功能做得比较强,可以非常方便自定义一些自己常用的SQL模板。

Workbench:

是最老牌的数据库管理工具了。最早由奥地利程序员Michael G. Zinner独立开发,之后Zinner于2003年加入了MySQL AB公司,并于2005年发布了最早的Workbench 5.0版本;2013年发布了,6.0版本;2018年,发布了8.0版本。整体上,该产品依旧随着MySQL的版本而持续更新,但是,更新节奏较慢,界面也非常“老”,并没有受到Oracle/MySQL的重视。Workbench支持主流的Windows、Mac OS X以及Linux,并且开放源代码。但因为界面架构比较长时间没有更新,所以使用的交互体验一般。因为是MySQL官方工具,功能支持是比较完整的,包括SQL补全、SQL历史、导入导出、结果集编辑、E-R模型、数据对比、结构对比、数据迁移等功能都具备。另外,也提供商业化的企业版,支持部分MySQL企业版的功能。

DBeaver:

是一个基于 Java 开发数据库管理工具,提供开源免费的版本。因为是基于Java的,所以也能够支持Windows、Linux、macOS 等 *** 作系统,其支持的数据库类型也比较多。同时也是因为基于Java,其在访问的不同的数据库版本时,有时候需要在线做一些驱动更新,需要访问GitHub的一些资源,而因为一些原因,这类更新经常失败,使其使用体验有一定打折。DBeaver也提供了基础的SQL补全、导入导出、结果集编辑等功能,但也有部分功能仅限于企业版(Pro版本)才提供,另外,软件似乎因为比较大的缘故,所以运行起来有点慢。

phpMyAdmin:

这是另一个老牌的开源免费MySQL访问工具了,在云时代之前,开发者经常需要自己搭建自己完整的开发环境(例如“LAMP”)时,该软件还比较流行。从名字可以看出来,这是一个PHP的Web-Based的MySQL访问工具,所以需要使用并不是很方便,需要构建自己的Web服务器和PHP运行环境。一般来说,现在的开发者也并不会这么去做。另外,phpMyAdmin一直没有商业化,主要靠捐赠和赞助的方式在运转(参考,有意思的是Navicat也在赞助列表,而且是唯一的白金赞助商),整体上,phpMyAdmin其迭代速度非常慢,功能支持也很有限,但是如果是简单、基础的使用,是没有问题的。但,如果是日常开发使用,并不是很推荐。

dbForge:

dbForge是devart的核心产品,最早主要是支持SQL Server数据库,最近几年也发布了对MySQL数据库的支持,也是一个商业化收费软件,产品可以下载试用一段时间。根据使用经验来看,体验还是非常不错的,功能也非常完整。但是,仅支持Windows版本,标准版费用为199美元/年,起步价也并不便宜。

SQLYOG:

SQLyog更多的是专注于数据库的管理,包括性能、监控、优化等方面,也提供基础SQL编辑功能,所以在早期,其在DBA群体中比较受欢迎,但是在整体的开发者中,使用比率并不高。虽然,提供开源的社区版本,但是当前,公司主要在推广其商业版本。另外,在云时代对于监控与实例管理方面的诉求在降低,在SQL开发与云适配上需求更强。从这个角度来看,并不是很推荐这个这个产品。此外,该软件仅支持Windows系统。最近几年这个产品发展比较缓慢,而且SQL开发功能也不再是主推的功能,所以也并不是特别推荐。

HeidiSQL:

HeidiSQL也是一个发展了很长时间的MySQL客户端,使用Delphi构建,所以整体上,有非常好的Windows使用体验。但是不能支持macOS或者Linux。因为发展时间比较长,功能也比较完整。新增了部分对于云产品的适配,例如,如果类型选择的是AWS RDS,那么在kill连接的时候会使用特定的存储过程进行kill。

阿里云DMS:

因为阿里云在国内市占率非常高,所以,阿里云DMS也是一个使用比较广,但是也因为其为阿里云的产品,所以其作为MySQL管理工具并不是非常有名。DMS比较完整的支持MySQL日常SQL开发相关的工作,其功能矩阵也比较完整,可以完成日常的开发工作。DMS对于阿里云数据库的适配自然是非常好,使用也比较便利。但,其对于其他云数据库(诸如腾讯、华为、AWS)的支持就比较有限,而且似乎也并不会在这方面做任何的投入。另外,DMS最近一年的产品大方向主要是在于"一站式的数据管理",所以新增了数据资产、数据开发任务编排等功能。不再是一个SQL开发工具。

BeeKeeper Studio:

Beekeeper目前是由一个由个人开发的MySQL GUI软件。界面简洁现代,支持比较基础的SQL开发功能,包括了SQL窗口、创建表等能力,同时有非常好的平台兼容性。向用户提供免费的功能有限的社区版,完整版是收费的,最低价格为19美元。

DbVisualizer:

DbVisualizer发展时间也比较长了,支持的数据库种类也非常多,底层是基于Java构建的,有不错的平台兼容性,支持Windows / Linux / macOS,在市场也获得不错认可。不过,该软件仅支持英语,并没有对应的中文支持。

小结

通过Wine等方式支持的OS平台,这里并没有考虑,因为根据经验来看,大多数情况下,稳定性都不太好。另外,市面上也还有一些产品超过两年未更新,这里就不再介绍了,例如MyDB Studio;也有部分软件平台属性太强,例如Sequel Pro仅支持Mac,这里也没有介绍。总体上,打分有较强的主观性,所以仅供参考。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7542442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存