当前位置: 首页 > 科技观察

MySQL高性能学习笔记

时间:2023-03-16 11:43:05 科技观察

一、在Ubuntu上安装mysql我们在Ubuntu环境下安装一个测试MySQL来学习。1.更新软件包sudoapt-getupdate2。安装MySQL服务器和客户端sudoapt-getinstallmysql-servermysql-client安装过程中需要输入数据库密码。3、启动Mysqlsudoservicemysqlrestart4。登录mysqlmysql-uroot-p2.sysbench基准测试sysbench是一款开源、模块化、跨平台的多线程性能测试工具,可用于CPU、内存、磁盘I/O、线程、数据库性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。当前函数允许测试的系统参数有:fileI/Operformance(文件I/O性能)schedulerperformance(调度性能)memoryallocationandtransferspeed(内存分配和传输速度)POSIXthreadsimplementationperformance(POSIX线程执行performance)databaseserverperformance(OLTPbenchmark)(databaseserverperformance)1.可以直接aptubuntu系统,如:apt-getinstallsysbench安装时出现这样的错误:Couldnotgetlock/var/lib/dpkg/lock这个出现问题可能是其他程序在运行,导致资源被锁定不可用。资源被锁定的原因可能是上次安装或更新没有正常完成,然后出现这种情况。解决方法其实很简单:在终端输入下面两句:sudorm/var/cache/apt/archives/locksudorm/var/lib/dpkg/lock再尝试安装,问题解决。2.通用选项说明root@db2:~#sysbenchMissingrequiredcommandargument.Usage:#Usemethodsysbench[general-options]...--test=[test-options]...commandGeneraloptions:#Generaloptions--num-threads=Nnumberofthreadstouse[1]#创建测试线程数。默认为1。--max-requests=Nlimitfortotalnumberofrequests[10000]#最大请求数。默认为10000,0表示无限制。--max-time=Nlimitfortotalexecutiontimeinseconds[0]#最大执行时间,单位为s。默认为0,无限制。--forced-shutdown=STRING强制关机前等待--max-time的时间[off]#Exceedingmax-time强制关机。默认关闭。--thread-stack-size=SIZEsizeofstackperthread[32K]#每个线程的堆栈大小。默认值为32K。--init-rng=[on|off]initializerandomnumbergenerator[off]#是否在测试开始时初始化随机数生成器。默认关闭。--test=STRINGtesttorun#指定测试项目名称。--debug=[on|off]printmoredebugginginfo[off]#是否显示更多调试信息。默认关闭。--validate=[on|off]performvalidationcheckswherepossible[off]#Performvalidationcheckswherepossible.尽可能执行验证检查。默认关闭。--help=[on|off]打印帮助并退出#帮助信息。--version=[on|off]打印版本并退出#version信息。编译测试:#testprojectfileio-文件I/O测试#IOcpu-CPU性能测试#CPUmemory-内存函数速度测试#memorythreads-线程子系统性能测试#threadmutex-互斥性能测试#mutualexclusion性能测试oltp-OLTP测试#数据库,事务处理命令:prepare:测试前准备;运行:正式测试清理:测试帮助版本后删除测试数据有关每个测试的选项列表,请参阅“sysbench--test=help”。#查看每个测试项的更多选项列表Moreoptions:1):sysbench--test=fileiohelproot@db2:~#sysbench--test=fileiohelpsysbench0.4.12:multi-threadedsystemevaluationbenchmarkfileiooptions:--file-num=N个数要创建的测试文件。默认为128--file-block-size=N测试时文件块的大小。默认为16384(16K)--file-total-size=SIZE测试文件的总大小。默认为2G--file-test-mode=STRING文件测试模式{seqwr(顺序写),seqrewr(顺序读写),seqrd(顺序读),rndrd(随机读),rndwr(随机写),rndrw(随机读写)}--file-io-mode=STRING文件操作模式{sync(同步)、async(异步)、fastmmap(快图映射)、slowmmap(慢图映射)}。默认为sync--file-extra-flags=STRING使用额外标志打开文件{sync,dsync,direct}。默认为空--file-fsync-freq=N执行fsync()的频率。(0-不使用fsync())。默认为100--file-fsync-all=[on|off]每次写入操作后执行fsync。默认是off--file-fsync-end=[on|off]只在测试结束时执行fsync。默认为on--file-fsync-mode=STRING同步使用哪种方法{fsync,fdatasync}。默认是fsync--file-merged-requests=N如果可能,要合并的最大IO请求数(0-表示不合并)。默认为0--file-rw-ratio=N测试时读写的比例。默认为1.52):sysbench--test=cpuhelp--cpu-max-prime=N素数生成器的最大数量。默认为100003):sysbench--test=memoryhelproot@db2:~#sysbench--test=memoryhelpsysbench0.4.12:multi-threadedsystemevaluationbenchmarkmemoryoptions:--memory-block-size=SIZE测试时的内存块大小。默认为1K--memory-total-size=SIZE传输数据的总大小。默认为100G--memory-scope=STRING内存访问范围{global,local}。默认是global--memory-hugetlb=[on|off]从HugeTLB池分配内存。默认是off--memory-oper=STRING内存操作类型。{read,write,none}defaultiswrite--memory-access-mode=STRING内存访问模式{seq,rnd}defaultisseq4):sysbench--test=threadshelpssysbench0.4.12:multi-threadedsystemevaluationbenchmarkthreads选项:--thread-yields=N每个请求产生多少个线程。默认为1000--thread-locks=N每个线程的锁数。默认为85):sysbench--test=mutexhelproot@db2:~#sysbench--test=mutexhelpsysbench0.4.12:multi-threadedsystemevaluationbenchmarkmutexoptions:--mutex-num=N数组互斥量的总大小。默认为4096--mutex-locks=N每个线程的互斥数。默认为50000--mutex-loops=N内部互斥锁的空循环数。默认为100006):sysbench--test=oltphelproot@db2:~#sysbench--test=oltphelpsysbench0.4.12:multi-threadedsystemevaluationbenchmarkoltpoptions:--oltp-test-mode=STRING执行模式{简单,复杂(高级交易),nontrx(非交易),sp}。默认为complex--oltp-reconnect-mode=STRINGreconnectmode{session(不要使用reconnect。每个线程只在测试结束时断开连接),transaction(每次事务后重新连接),query(在每次重新连接后每一条SQL语句都执行),随机(每条事务随机选择上述重连方式)}。默认为session--oltp-sp-name=STRING存储过程的名称。默认为空--oltp-read-only=[on|off]只读模式。无法执行更新、删除和插入语句。默认值为off--oltp-skip-trx=[on|off]以省略begin/commit语句。默认是off--oltp-range-size=N查询范围。默认为100--oltp-point-selects=N个点选择[10]--oltp-simple-ranges=N个简单范围[1]--oltp-sum-ranges=N个求和范围[1]]--oltp-order-ranges=N个有序范围[1]--oltp-distinct-ranges=N个不同范围[1]--oltp-index-updates=N个索引更新[1]]--oltp-non-index-updates=N次非索引更新[1]--oltp-nontrx-mode=STRING非事务执行模式的查询类型{select,update_key,update_nokey,insert,delete}[select]--oltp-auto-inc=[on|off]是否启用AUTO_INCREMENT。默认是on--oltp-connect-delay=N连接数据库后多少微秒。默认为10000--oltp-user-delay-min=N每次请求的最短等待时间。单位为毫秒。默认为0--oltp-user-delay-max=N每次请求的最大等待时间。单位为毫秒。默认为0--oltp-table-name=STRING测试中使用的表的名称。默认是sbtest--oltp-table-size=N测试表的记录数。默认为10000--oltp-dist-type=STRING随机数分布{uniform(均匀分布)、Gaussian(高斯分布)、special(空间分布)}。默认是特殊的--oltp-dist-iter=N生成数字的迭代次数。默认为12--oltp-dist-pct=N值的百分比被视为“特殊”(用于特殊分布)。默认为1--oltp-dist-res=N'特殊'百分比值。默认是75Generaldatabaseoptions:--db-driver=STRING指定数据库驱动程序('help'togetlistofavailabledrivers)--db-ps-mode=STRING编制报表使用模式{auto,disable}[auto]Compiled-indatabasedrivers:mysql-MySQLdrivermysqloptions:--mysql-host=[LIST,...]MySQL服务器主机[localhost]--mysql-port=NMySQL服务器端口[3306]--mysql-socket=STRINGMySQLsocket--mysql-user=STRINGMySQL用户[sbtest]--mysql-password=STRINGMySQL密码[]--mysql-db=STRINGMySQL数据库名[sbtest]--mysql-table-engine=STRING要使用的存储引擎对于测试表{myisam,innodb,bdb,heap,ndbcluster,federated}[innodb]--mysql-engine-trx=STRING使用的存储引擎是否是事务性的{yes,no,auto}[auto]--mysql-ssl=[on|off]如果在客户端库中可用,则使用SSL连接[off]--myisam-max-rows=NMyISAM表的最大行参数[1000000]--mysql-create-options=STRING附加optionspassedtoCREATETABLE[]3.测试线程序sysbench--test=threads--num-threads=500--thread-yields=100--线程锁=4run4。测试IO开启的线程--num-threads--file-total-size文件总大小为1,在prepare阶段会生成需要的测试文件,完成后会在当前目录下很多小的文件生成在sysbench--test=fileio--num-threads=16--file-total-size=2G--file-test-mode=rndrwprepare2,运行阶段sysbench--test=fileio--num-threads=20--file-total-size=2G--file-test-mode=rndrwrun以下命令运行文件I/O混合随机读/写基准测试:sysbench--test=fileio--file-total-size=3G--file-test-mode=rndrw--max-time=300--max-requests=0run执行结果:输出结果分析:每秒请求数为:233.33Requests/sec吞吐量为:3.6458Mb/sec清除运行文件:sysbench--test=fileio--file-total-size=3Gcleanup5。清理测试时生成的文件sysbench--test=fileio--num-threads=20--file-total-size=2G--file-test-mode=rndrwcleanup6。测试内存sysbench--test=memory--memory-block-size=8k--memory-total-size=1Grun7。测试mutexsysbench--test=mutex-num-threads=100-mutex-num=1000-mutex-locks=100000–mutex-loops=10000run8。测试OLTP1,准备阶段,生成需要的测试表sysbench--test=oltp--mysql-table-engine=innodb--mysql-host=192.168.X.X--mysql-db=test--oltp-table-size=500000--mysql-user=root--mysql-password=123456prepare2,运行阶段sysbench--num-threads=16--test=oltp--mysql-table-engine=innodb--mysql-host=192.168.x.x--mysql-db=test--oltp-table-size=500000--mysql-user=root--mysql-password=123456run3、清理test表sysbench--num-threads=16--test=oltp--mysql-table-engine=innodb--mysql-host=192.168.x.x--mysql-db=test--oltp-table-size=500000--mysql-user=root--mysql-password=123456cleanup3、服务器性能分析在我们实际开发中,最常遇到三种与性能相关的服务器请求:1、如何确认服务器是否达到最佳性能状态;2.找出某某3.诊断一些用户描述为“暂停”、“累积”或“卡顿”的间歇性、疑难故障,找出慢的原因,以便对症下药1、什么是性能?我们将性能定义为完成任务所需时间的度量,换句话说,性能就是响应时间。完成一个任务所需的时间可以分为两部分:执行时间和等待时间。2.衡量PHP应用这里我们使用了一个名为ifP(instrumentation-for-php)的PHP性能分析工具,代码托管在GoogleCode(https://code.google.com/archi...)上,工具可以更好地专注于数据库调用。所以当无法在数据库层面进行测试时,Ifp可以帮助应用程序分析数据库的利用率。Ifp是一个提供计数器和计时器的单例类。在生产环境部署起来很容易,因为它不需要PHP配置权限(因为很多开发者没有PHP配置权限。)error_reporting(-1);require_once('../src/Instrumentation.php');$instance=false;$ret=Instrumentation::get_instance()->start_request();print_r($ret);