我有一个奇怪的问题,我似乎无法解决。我更像是一个网络程序员而不是服务器/数据库管理员,所以我希望这里有人可以帮助我。
情况
我正在开发一个处理大量update
,insert
和delete
请求的系统。因此,我选择 INNODB 作为我的存储引擎,因为它具有行锁定功能。我们每 10 分钟更新 60,000 条记录,使用 Gearman 在不同服务器上并行处理我们的工作。代码是用 PHP 编写的,我们使用的是 Zend Framework。
问题
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
Run Code Online (Sandbox Code Playgroud)
我们几乎每 30 分钟就会收到一次上述错误,来自我们的一名 Gearman 工人。
这 mysql_report
MySQL 5.1.63-0+squeeze1 uptime 15 9:52:12 Tue Sep 11 21:25:23 2012
__ Key _________________________________________________________________
Buffer used 55.00k of 16.00M %Used: 0.34
Current 2.92M %Usage: 18.24
Write hit 99.95%
Read hit 100.00%
__ Questions ___________________________________________________________
Total 122.05M 91.7/s
DMS 106.63M 80.1/s %Total: …
Run Code Online (Sandbox Code Playgroud) raid 5 适合安装 mysql 吗?
让我进一步解释我的应用程序。我的应用程序是一个套接字编程,它将与 gps 设备连接以接收 gps 字符串,然后进行进一步处理。套接字编程将在另一台服务器中,而 db 将在另一台服务器中。因此,在进一步处理期间,它将从数据库查询。所以在这里我猜会有很多 i/o 仪式。在进一步的处理过程中,最少有 5 个选择,插入最少 1 个,但有时它甚至可能最少 4 个或更多,还有一些更新。希望我现在更清楚了。