数据库简单压测

mysqlslap 是 Mysql 自带的压力测试工具,可以模拟出大量客户端同时操作数据库的情况,通过结果信息来了解数据库的性能状况


使用JM压测数据库

    1、点击测试计划,再点击“浏览”,把JDBC驱动添加进来;

        JDBC驱动:mysql-connector-java-5.1.39-bin.jar

         一般位于java环境的   \java\jre\lib\ext   文件中

    2、添加线程组,设置线程数、启动时间、循环次数

    3、右键点击该线程组,再添加一个配置元件:JDBC Connection Configuration

           JDBC配置原件参数说明:

                Variable Name(变量名):这里写入数据库连接池的名字

                Database URL:数据库连接地址 (jdbc:mysql://host:port/name)

                JDBC Driver class:数据库驱动(可以将需要连接的数据库驱动jar包复制到jmeter的lib/目录下,然后在设置测试计划界面,最下面的Library中导入)(com.mysql.jdbc.Driver)

    4、添加JDBC请求,(取样器中添加)

            Variable name:这里写入数据库连接池的名字(和JDBC Connection Configuration名字保持一致 )

            Query:里面填入查询数据库数据的SQL语句(填写的SQL语句末尾不要加“;”)

            parameter valus:数据的参数值

            parameter types:数据的参数类型

            cariable names:保存SQL语句返回结果的变量名

            result cariable name:创建一个对象变量,保存所有返回结果

            query timeout:查询超时时间

            handle result set:定义如何处理由callable statements语句返回的结果

    5、添加结果树,调试

    6、添加聚合报告,查看返回结果



利用Monyog实时监控数据库:


1/链接状态

2/数据库吞吐量

3/缓存未命中

4/声明

5/CPU使用率

6/磁盘IO


随着并发的增加,服务器的处理能力或者说tps也在增加,直到到达极限值。超过并发极限值后cpu或内存资源会出现死锁、阻塞等等问题导致服务器处理能力下降。

可以根据buffer_pool配置来提升事务处理能力

Buffer Pool

简介:Innodb维护了一个缓存区域叫做Buffer Pool,用来缓存数据和索引在内存中。Buffer Pool可以用来加速数据的读写,如果Buffer Pool越大,那么Mysql就越像一个内存数据库,所以了解Buffer Pool的配置可以提高Buffer Pool的性能。

innodb_buffer_pool_size:缓存区域的大小。

innodb_buffer_pool_chunk_size:当增加或减少innodb_buffer_pool_size时,操作以块(chunk)形式执行。块大小由innodb_buffer_pool_chunk_size配置选项定义,默认值128M。

innodb_buffer_pool_instances:当buffer pool比较大的时候(超过1G),innodb会把buffer pool划分成几个instances,这样可以提高读写操作的并发,减少竞争。读写page都使用hash函数分配给一个instances。

当增加或者减少buffer pool大小的时候,实际上是操作的chunk。buffer pool的大小必须是innodb_buffer_pool_chunk_sizeinnodb_buffer_pool_instances,如果配置的innodb_buffer_pool_size不是innodb_buffer_pool_chunk_sizeinnodb_buffer_pool_instances的倍数,buffer pool的大小会自动调整为innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍数,自动调整的值不少于指定的值。

如果指定的buffer大小是9G,instances的个数是16,chunk默认的大小是128M,那么buffer会自动调整为10G。具体的配置可以参考mysql官网的介绍mysql reference


优化思路:

在数据库级别进行优化

    表格结构合理

    是否有适当的 索引来提高查询效率

    是否为每个表使用适当的存储引擎

    每个表是否使用适当的行格式

    应用程序是否使用适当的 锁定策略

    是否正确使用了用于缓存的所有内存区域?也就是说,足够大以容纳频繁访问的数据,但不能太大以至于它们会超载物理内存并导致分页。要配置的主要内存区域是InnoDB缓冲池,MyISAM密钥缓存和MySQL查询缓存。

在硬件级别进行优化

    磁盘寻求。磁盘需要一段时间才能找到一块数据。对于现代磁盘,平均时间通常低于10毫秒,因此我们理论上可以做到大约100次寻找。这个时间用新磁盘慢慢改善,并且很难针对单个表进行优化。优化寻道时间的方法是将数据分配到多个磁盘上。

    磁盘读写。当磁盘位于正确位置时,我们需要读取或写入数据。使用现代磁盘,一个磁盘可提供至少10-20MB / s的吞吐量。这比搜索更容易优化,因为您可以从多个磁盘并行读取。

    CPU周期。当数据在主存储器中时,我们必须处理它以获得我们的结果。与内存量相比具有大表是最常见的限制因素。但是对于小桌子,速度通常不是问题。

    内存带宽。当CPU需要的数据量超过CPU缓存容量时,主内存带宽成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但需要注意的是。

平衡可移植性和性能

    要在一个可移植MySQL程序中使用面向性能的SQL扩展,可以将MySQL特定的关键字封装在/*! * /语句的注释分隔符中。其他SQL服务器将会忽略注释的关键字。




具体参考:

https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.html#innodb-buffer-pool-lru

你可能感兴趣的:(数据库简单压测)