最近,我们将其中一张表切换到InnoDB,现在我们正在经历非常缓慢的更新执行时间。过去需要0.010-0.030秒的更新现在可以花费70秒以上。某些查询被删除,因为它们无法在默认的50秒内获得锁定(我意识到我们可以提高此限制)。

所讨论的表只有一个索引,这是一个中等值的主要密钥本身。桌子有大约100万行。在此上下文中的所有更新都涉及一行。通常,该行中的4-5列在每个查询中都会受到影响。

当前my.cnf在下面粘贴。您是否看到任何可能会导致InnoDB更新性能的任何东西?

[mysqld]
set-variable=local-infile=0

datadir=/db/mysql/data
socket=/var/lib/mysql/mysql.sock
#log = /var/log/mysqld.log
log-error = /var/log/mysqld.error.log
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1


skip-locking
key_buffer = 1G
query_cache_size = 256M
thread_cache_size = 128
table_cache = 2048
max_connections = 400
query_cache_limit = 1024M
log_slow_queries = /var/log/mysql-slow.log
long_query_time = 1
skip-bdb
skip-locking
skip-name-resolve

innodb_buffer_pool_size=1G
innodb_additional_mem_pool_size=20M
innodb_flush_log_at_trx_commit=2
#innodb_log_file_size=250M
innodb_log_buffer_size=8M
innodb_lock_wait_timeout=50


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

更新:
Innodb_log_file_size:5242880
have_innodb:是的
“ where”子句总是只查找一列,这是主要键。

更新 - 2012年7月26日:
我们将数据库升级到MySQL 5.5。现在,InnoDB的更新非常快,在我们的特定情况下不到0.010秒。而且,差异非常低。我的看法是:InnoDB应在MySQL 5.0上真正谨慎使用。

有帮助吗?

解决方案

透视#1

当您仅在InnoDB中按主键进行更新时,会有一个罕见但可能的场合索引(又名) gen_clust_index)可以锁定。

我曾经回答过三个帖子 一个人 关于这个主题

请仔细阅读。这些问题的海报根据看到InnoDB聚集的索引锁定行为找到了自己的解决方法。可悲的是,他没有发布解决方法。

另外,当您看到查询运行缓慢时,登录MySQL并运行 SHOW ENGINE INNODB STATUS\G 并开始在聚类索引中寻找锁。

透视#2

我看到你发表了评论 innodb_log_file_size. 。您的默认值为5MB。自从 innodb_buffer_pool_size 设置为1G,Innodb_log_file_size需要为256m。 单击此处,将Innodb_log_file_size设置为256m.

透视图#3

我看到你没有使用 innodb_file_per_table. 。您可能需要使用它,以便对具有一百万行的一张表进行专门完成表更新。 单击此处查看如何清理InnoDB基础架构以使用Innodb_file_per_table.

其他提示

  1. 您是否正在更新主要钥匙值的值?

  2. 其他表的外国键是否有列?由于InnoDB还通过Cascade在同一交易中更新外国钥匙。

  3. 您能否将Innodb_buffer_pool_size增加到超过1GB,以便整个表格适合内存?

  4. Schmea中有多少其他桌子 - 因为可能存在调整表空间大小的问题以进行更新

  5. 您可能需要尝试使用Innodb_file_per_table在其中为每个表创建表空间文件。更改此参数后,您需要重新启动服务器,然后重新创建数据库以使其生效。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top