poorX

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  117 随笔 :: 0 文章 :: 11 评论 :: 16万 阅读

两台MySQL配置不一样,要测试下性能差别

复制代码
[m1]
long_query_time         = 0.1
log_slave_updates
innodb_flush_log_at_trx_commit  = 1

[m2]
long_query_time         = 1
#log_slave_updates
innodb_flush_log_at_trx_commit  = 2
innodb_file_per_table
innodb_write_io_threads = 8
innodb_read_io_threads = 8
复制代码

设备配置

CPU:Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz *2  8核
内存:64G
磁盘:raid5

编译安装sysbench

复制代码
[root@m1 sysbench-0.4.12]# ./configure --with-mysql-includes=/servers/mysql/include --with-mysql-libs=/servers/mysql/lib
[root@m1 sysbench-0.4.12]# make && make install
...
make[2]: Entering directory `/sysbench-0.4.12/sysbench'
/bin/sh ../libtool --tag=CC   --mode=link gcc -pthread -g -O2      -o sysbench sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a drivers/mysql/libsbmysql.a -L/servers/mysql/lib -lmysqlclient_r   -lrt -lm 
../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
../libtool: line 1951: X-L/servers/mysql/lib: No such file or directory
../libtool: line 2400: Xsysbench: command not found

Fatal server error:
Server is already active for display 0
        If this server is no longer running, remove /tmp/.X0-lock
        and start again.


Please consult the CentOS support 
         at https://www.redhat.com/apps/support/
 for help. 
...
复制代码

上面报错是因为sysbench的libtool版本低于OS的,删除替换成OS的libtool

[root@m1 sysbench-0.4.12]# which libtool
/usr/bin/libtool
[root@m1 sysbench-0.4.12]# mv libtool libtool_bak
[root@m1 sysbench-0.4.12]# cp -r /usr/bin/libtool ./
[root@m1 sysbench-0.4.12]# make && make install

测试sysbench

[root@m1 sysbench-0.4.12]# sysbench --test=cpu --cpu-max-prime=200 run  
sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

报错替换lib64的libmysqlclient文件

[root@m1 sysbench-0.4.12]# ln -s  /servers/mysql/lib/libmysqlclient.so.18 /usr/lib64/
[root@m1 sysbench-0.4.12]# ll /usr/lib64/libmysqlclient.so.18 
lrwxrwxrwx. 1 root root 46 Sep 15 11:56 /usr/lib64/libmysqlclient.so.18 -> /servers/mysql/lib/libmysqlclient.so.18

 

OLTP性能测试:

参数说明

复制代码
参数说明:
[root@m1 ~]# sysbench --help
Usage:
  sysbench [general-options]... --test=<test-name> [test-options]... command

General options:
  --num-threads=N            number of threads to use [1]   线程数
  --max-requests=N           limit for total number of requests [10000]   事务请求数
  --max-time=N               limit for total execution time in seconds [0]
  --forced-shutdown=STRING   amount of time to wait after --max-time before forcing shutdown [off]
  --thread-stack-size=SIZE   size of stack per thread [32K]
  --init-rng=[on|off]        initialize random number generator [off]
  --test=STRING              test to run
  --debug=[on|off]           print more debugging info [off]
  --validate=[on|off]        perform validation checks where possible [off]
  --help=[on|off]            print help and exit
  --version=[on|off]         print version and exit

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
  oltp - OLTP test

Commands: prepare run cleanup help version

See 'sysbench --test=<name> help' for a list of options for each test.

[root@m1 ~]# sysbench --test=oltp help
sysbench 0.4.12:  multi-threaded system evaluation benchmark

oltp options:
  --oltp-test-mode=STRING         test type to use {simple,complex,nontrx,sp} [complex]
  --oltp-reconnect-mode=STRING    reconnect mode {session,transaction,query,random} [session]
  --oltp-sp-name=STRING           name of store procedure to call in SP test mode []
  --oltp-read-only=[on|off]       generate only 'read' queries (do not modify database) [off]
  --oltp-skip-trx=[on|off]        skip BEGIN/COMMIT statements [off]
  --oltp-range-size=N             range size for range queries [100]
  --oltp-point-selects=N          number of point selects [10]
  --oltp-simple-ranges=N          number of simple ranges [1]
  --oltp-sum-ranges=N             number of sum ranges [1]
  --oltp-order-ranges=N           number of ordered ranges [1]
  --oltp-distinct-ranges=N        number of distinct ranges [1]
  --oltp-index-updates=N          number of index update [1]
  --oltp-non-index-updates=N      number of non-index updates [1]
  --oltp-nontrx-mode=STRING       mode for non-transactional test {select, update_key, update_nokey, insert, delete} [select]
  --oltp-auto-inc=[on|off]        whether AUTO_INCREMENT (or equivalent) should be used on id column [on]
  --oltp-connect-delay=N          time in microseconds to sleep after connection to database [10000]
  --oltp-user-delay-min=N         minimum time in microseconds to sleep after each request [0]
  --oltp-user-delay-max=N         maximum time in microseconds to sleep after each request [0]
  --oltp-table-name=STRING        name of test table [sbtest]   表名
  --oltp-table-size=N             number of records in test table [10000]  表的行数
  --oltp-dist-type=STRING         random numbers distribution {uniform,gaussian,special} [special]
  --oltp-dist-iter=N              number of iterations used for numbers generation [12]
  --oltp-dist-pct=N               percentage of values to be treated as 'special' (for special distribution) [1]
  --oltp-dist-res=N               percentage of 'special' values to use (for special distribution) [75]

General database options:

  --db-driver=STRING  specifies database driver to use ('help' to get list of available drivers)
  --db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]


Compiled-in database drivers:
  mysql - MySQL driver

mysql options:
  --mysql-host=[LIST,...]       MySQL server host [localhost]
  --mysql-port=N                MySQL server port [3306]
  --mysql-socket=STRING         MySQL socket
  --mysql-user=STRING           MySQL user [sbtest]
  --mysql-password=STRING       MySQL password []
  --mysql-db=STRING             MySQL database name [sbtest]
  --mysql-table-engine=STRING   storage engine to use for the test table {myisam,innodb,bdb,heap,ndbcluster,federated} [innodb]
  --mysql-engine-trx=STRING     whether storage engine used is transactional or not {yes,no,auto} [auto]
  --mysql-ssl=[on|off]          use SSL connections, if available in the client library [off]
  --myisam-max-rows=N           max-rows parameter for MyISAM tables [1000000]
  --mysql-create-options=STRING additional options passed to CREATE TABLE []
复制代码

 

测试_200W数据_PREPARE

[root@m2 ~]# sysbench --test=oltp --mysql-user=user --mysql-password=passwd --mysql-socket=/data/mysql/tmp/mysql.sock --oltp-table-size=2000000 --mysql-db=test --oltp-table-name=test200w --max-requests=200000 --num-threads=200 --mysql-table-engine=innodb prepare
sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Creating table 'test200w'...
Creating 2000000 records in table 'test200w'...

 

测试_200W数据_RUN

复制代码
[root@m1 ~]# sysbench --test=oltp --mysql-user=user --mysql-password=passwd --mysql-socket=/data/mysql/tmp/mysql.sock --oltp-table-size=2000000 --mysql-db=test --oltp-table-name=test200w --max-requests=200000 --num-threads=200 --mysql-table-engine=innodb --oltp-skip-trx=off 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: 200

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 200000
Threads started!
Done.

OLTP test statistics:
    queries performed:
        read:                            2800070
        write:                           1000025
        other:                           400010
        total:                           4200105
    transactions:                        200005 (3205.05 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 3800095 (60895.90 per sec.)
    other operations:                    400010 (6410.09 per sec.)

Test execution summary:
    total time:                          62.4031s
    total number of events:              200005
    total time taken by event execution: 12473.5711
    per-request statistics:
         min:                                 13.09ms
         avg:                                 62.37ms
         max:                                261.41ms
         approx.  95 percentile:              88.53ms

Threads fairness:
    events (avg/stddev):           1000.0250/7.76
    execution time (avg/stddev):   62.3679/0.01
复制代码

 

复制代码
[root@m2 ~]# sysbench --test=oltp --mysql-user=user --mysql-password=passwd --mysql-socket=/data/mysql/tmp/mysql.sock --oltp-table-size=2000000 --mysql-db=test --oltp-table-name=test200w --max-requests=200000 --num-threads=200 --mysql-table-engine=innodb --oltp-skip-trx=off 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: 200

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 200000
Threads started!
Done.

OLTP test statistics:
    queries performed:
        read:                            2800154
        write:                           1000055
        other:                           400022
        total:                           4200231
    transactions:                        200011 (3165.83 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 3800209 (60150.74 per sec.)
    other operations:                    400022 (6331.66 per sec.)

Test execution summary:
    total time:                          63.1781s
    total number of events:              200011
    total time taken by event execution: 12629.9640
    per-request statistics:
         min:                                 12.43ms
         avg:                                 63.15ms
         max:                                278.01ms
         approx.  95 percentile:              89.76ms

Threads fairness:
    events (avg/stddev):           1000.0550/7.63
    execution time (avg/stddev):   63.1498/0.01
复制代码

 

测试分为两个对照组

表数据 事务数 线程数
200W 20W 200
200W 20W 400
200W 20W 600
200W 20W 800
2000W 20W 200
2000W 20W 400
2000W 20W 600
2000W 20W 800

 

 

 

 

 

 

 

 

 

四幅图中上面两个是表数据200W,下面是表数据2000W

由于观察m1和m2两个配置在对照组中性能差别不大,怀疑由于InnoDB I/O配置的innodb_write_io_threads = 8innodb_read_io_threads = 8过大,导致引擎层面并发I/O因瓶颈无发发挥出并发效果,m3的配置既恢复默认的4。

 

posted on   poorX  阅读(2391)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示