免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6589 | 回复: 13
打印 上一主题 下一主题

MySQL InnoDB 压力测试遇到问题,求解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-18 10:36 |只看该作者 |倒序浏览
20可用积分
当前环境:
RHEL5u2
MySQL-server-enterprise-gpl-5.1.30
mysql配置文件使用my-innodb-heavy-4G.cnf,并将default_table_type改为了INNODB


数据通过BanchmarkSQL生成100个仓库,大小在20G左右

通过BanchmarkSQL进行TPCC压力测试,当并发连接加到30以上时JDBC出现了以下错误
SQL Error: 1205,
SQLState: 41000,
Lock wait timeout exceeded; try restarting transaction

我认为是由于innodb的锁机制所造成的,但我对这方面不是太了解,哪位兄弟对innodb在大压力情况下的优化有了解的请给于支持

我正在做Postgres Plus / PostgreSQL / MySQL 的OLTP性能压力测试,结果出来后会于大家进行共享
我自己对MySQL的性能优化不太了解,为了测试的公平,希望MySQL的高手们多支持

论坛徽章:
0
2 [报告]
发表于 2009-01-18 14:55 |只看该作者

回复 #1 scottsiu 的帖子

自己顶一下,当前innodb的信息:

mysql> show table status from test;
+------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+------------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+
| Name       | Engine | Version | Row_format | Rows     | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free  | Auto_increment | Create_time         | Update_time | Check_time | Collation         | Checksum | Create_options | Comment |
+------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+------------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+
| customer   | InnoDB |      10 | Compact    |  3037204 |            613 |  1864368128 |               0 |    226492416 | 3573547008 |           NULL | 2009-01-18 14:17:43 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
| district   | InnoDB |      10 | Compact    |     1019 |            144 |      147456 |               0 |            0 | 3573547008 |           NULL | 2009-01-18 14:09:22 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
| history    | InnoDB |      10 | Compact    |  3006003 |             74 |   225181696 |               0 |            0 | 3573547008 |           NULL | 2009-01-18 11:38:04 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
| item       | InnoDB |      10 | Compact    |   100129 |             99 |     9977856 |               0 |            0 | 3573547008 |           NULL | 2009-01-18 14:35:09 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
| new_order  | InnoDB |      10 | Compact    |   900704 |             33 |    29949952 |               0 |            0 | 3573547008 |           NULL | 2009-01-18 14:19:21 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
| oorder     | InnoDB |      10 | Compact    |  3000331 |             49 |   147554304 |               0 |    126697472 | 3573547008 |           NULL | 2009-01-18 14:19:13 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
| order_line | InnoDB |      10 | Compact    | 29996445 |             81 |  2450522112 |               0 |            0 | 3573547008 |           NULL | 2009-01-18 14:27:23 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
| stock      | InnoDB |      10 | Compact    | 10015169 |            359 |  3600809984 |               0 |            0 | 3573547008 |           NULL | 2009-01-18 14:35:07 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
| warehouse  | InnoDB |      10 | Compact    |      100 |            163 |       16384 |               0 |            0 | 3573547008 |           NULL | 2009-01-18 14:09:22 | NULL        | NULL       | latin1_swedish_ci |     NULL |                |         |
+------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+------------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+
9 rows in set (0.34 sec)


mysql> show status like 'innodb_row_lock%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| Innodb_row_lock_current_waits | 14    |
| Innodb_row_lock_time          | 6136  |
| Innodb_row_lock_time_avg      | 292   |
| Innodb_row_lock_time_max      | 1611  |
| Innodb_row_lock_waits         | 21    |
+-------------------------------+-------+
5 rows in set (0.00 sec)

论坛徽章:
0
3 [报告]
发表于 2009-01-18 14:56 |只看该作者

回复 #2 scottsiu 的帖子

运行5分钟后:

mysql> show status like 'innodb_row_lock%';
+-------------------------------+---------+
| Variable_name                 | Value   |
+-------------------------------+---------+
| Innodb_row_lock_current_waits | 0       |
| Innodb_row_lock_time          | 1703932 |
| Innodb_row_lock_time_avg      | 81139   |
| Innodb_row_lock_time_max      | 121657  |
| Innodb_row_lock_waits         | 21      |
+-------------------------------+---------+
5 rows in set (0.00 sec)

论坛徽章:
0
4 [报告]
发表于 2009-01-18 15:02 |只看该作者

回复 #1 scottsiu 的帖子

mysql> show innodb status\G;
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
090118 15:01:36 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 58 seconds
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 83804, signal count 68521
Mutex spin waits 0, rounds 7356823, OS waits 55945
RW-shared spins 45319, OS waits 22652; RW-excl spins 106, OS waits 46
------------
TRANSACTIONS
------------
Trx id counter 0 52580
Purge done for trx's n < 0 52579 undo n < 0 0
History list length 2
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, process no 20029, OS thread id 1149040960
MySQL thread id 108, query id 80961877 localhost root
show innodb status
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (write thread)
Pending normal aio reads: 0, aio writes: 0,
ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0
13499 OS file reads, 80210 OS file writes, 47941 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2,
0 inserts, 0 merged recs, 0 merges
Hash table size 4425293, node heap has 5 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s
---
LOG
---
Log sequence number 5 2501154951
Log flushed up to   5 2501154951
Last checkpoint at  5 2501154951
0 pending log writes, 0 pending chkp writes
28763 log i/o's done, 0.00 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 2402919186; in additional pool allocated 14599680
Dictionary memory allocated 77544
Buffer pool size   131072
Free buffers       1
Database pages     131066
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages read 625695, created 1153971, written 1157617
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
1 read views open inside InnoDB
Main thread process no. 20029, id 1148639552, state: waiting for server activity
Number of rows inserted 102994751, updated 1511, deleted 110, read 60859626
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================

1 row in set, 1 warning (0.00 sec)

ERROR:
No query specified

论坛徽章:
0
5 [报告]
发表于 2009-01-18 15:04 |只看该作者

回复 #1 scottsiu 的帖子

我想这不会就是MySQL的性能吧!

又或者程序上对应这样的高并发环境应该如何进行修改,请高手们指点一下!
zhtx 该用户已被删除
6 [报告]
发表于 2009-01-19 11:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2009-01-19 21:02 |只看该作者
原帖由 scottsiu 于 2009-1-18 10:36 发表
当前环境:
RHEL5u2
MySQL-server-enterprise-gpl-5.1.30
mysql配置文件使用my-innodb-heavy-4G.cnf,并将default_table_type改为了INNODB


数据通过BanchmarkSQL生成100个仓库,大小在20G左右

通过B ...


通过BanchmarkSQL进行TPCC压力测试,当并发连接加到30以上时JDBC出现了以下错误

能了解下这个生成的测试主要内容是什么吗,感觉你这里发生好多锁等待,要么是没加索引导致,要么是故意产生的锁等待。

论坛徽章:
0
8 [报告]
发表于 2009-01-20 09:23 |只看该作者
你show innodb status应该在测试过成功给出,5分钟后啥意义也没有

论坛徽章:
0
9 [报告]
发表于 2009-01-20 10:30 |只看该作者
估计是有很多大事务,调大innodb_lock_wait_timeout试试看

论坛徽章:
0
10 [报告]
发表于 2009-01-21 17:14 |只看该作者
不是很清楚楼主测试的具体内容是什么
可以将innodb 的事务级别设成 READ COMMITTED,这样并发性要比默认配置更高一些
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP