我有一台应用程序使用托管在一台机器上的MySQL数据库和6台运行在其他机器上的客户机,这些机器通过本地网络读取和写入。MySQL更新逐渐变慢
我有一个主要的工作表,其中包含大约120,000个项目行工作。每个客户从表格中抽取40个未分配的工作项目(将它们标记为已分配),完成工作,然后将结果写回到同一工作表格。这个顺序一直持续到没有更多的工作要做。
上面是图片,显示为40分的结果的每个块使用UPDATE查询的客户端之一写回表所花费的时间量。你可以看到大部分时间的持续时间相当短,但是突然间持续时间高达300秒,并且一直持续到所有工作完成。执行查询的时间迅速增加是我需要帮助的。
客户端负载不重。该服务器有点加载,但它有16GB的内存,8个内核,除了托管这个数据库之外别无他法。
这里是相关的SQL代码。
创建表:
CREATE TABLE work (
item_id MEDIUMINT,
item VARCHAR(255) CHARACTER SET utf8,
allocated_node VARCHAR(50),
allocated_time DATETIME,
result TEXT);
/* Then insert 120,000 items, which is quite fast. No problem at this point. */
INSERT INTO work VALUES (%s,%s,%s,NULL,NULL,NULL);
客户端分配40个项目上工作:
UPDATE work SET allocated_node = %s, allocated_time=NOW()
WHERE allocated_node IS NULL LIMIT 40;
SELECT item FROM work WHERE allocated_node = %s AND result IS NULL;
更新与完成的结果行(这是得到了几个小时后,真的慢的部分运行):
/* The chart above shows the time to execute 40 of these for each write back of results */
UPDATE work SET result = %s WHERE item = %s;
我在Ubuntu 14.04上使用MySQL,所有标准设置英格斯。 决赛桌大约160MB,没有索引。
我没有看到我的查询有什么问题,除了整个事件需要整体应用两次之外,它们都能正常工作。
在这些问题上有经验的人能否提出我应该在MySQL中修改这个性能问题的任何配置设置,或者请指出我正在做什么可能解释图表中的时间的任何问题。
谢谢。
'工作'变得多大? 'innodb_buffer_pool_size'和'key_buffer_size'的值是什么?什么引擎正在使用? –