草庐IT

innodb-performance-optimization

全部标签

mysql - 查询时出现错误 'Unknown table engine ' InnoDB''。重启mysql后

我在服务器S1(mysql版本5.1.41-3ubuntu12.7-log)上有mysql数据库,我在服务器S2(mysql版本5.1.54-1ubuntu4-log)上为此数据库创建了主从。S1上的数据库正在使用一个数据文件(ibdata)。将数据库转储到S2后,我设置了innodb_file_per_table=1。这使得每个表都有自己的ibd文件。现在一切顺利。但是在S2上重新启动mysql后,我遇到了这个错误的问题:查询时出现“未知表引擎‘InnoDB’”错误。默认数据库:MyDB当我尝试展示引擎时showengines;+------------+---------+----

java - MySQL InnoDB 在等待表级锁时挂起

我有一个大型生产网络应用程序(Glassfish3.1+MySQL5.5)。所有表都是InnoDB。每几天一次应用程序完全挂起。SHOWFULLPROCESSLIST在不同的表上显示了许多简单的插入或更新查询,但都具有状态Waitingfortablelevellock例子:updateusersetuser.hasnewmessages=NAME_CONST('in_flag',_binary'\0'COLLATE'binary')whereuser.id=NAME_CONST('in_uid',66381)insertintoexchanges_itempackssetpackid

java - MySQL InnoDB 在等待表级锁时挂起

我有一个大型生产网络应用程序(Glassfish3.1+MySQL5.5)。所有表都是InnoDB。每几天一次应用程序完全挂起。SHOWFULLPROCESSLIST在不同的表上显示了许多简单的插入或更新查询,但都具有状态Waitingfortablelevellock例子:updateusersetuser.hasnewmessages=NAME_CONST('in_flag',_binary'\0'COLLATE'binary')whereuser.id=NAME_CONST('in_uid',66381)insertintoexchanges_itempackssetpackid

mysql - 如何使用 MySQL 将表预加载到 INNODB 缓冲池中?

我有一个使用MySQL的电子商务应用程序,我希望它更快。当在之前访问过的网站上访问某个部分#时,该部分加载很快,因为所有必要的数据都已经在INNODB缓冲池中。但是,如果以前从未加载过#部分,则该数据还不在缓冲池中,因此需要从磁盘读取,这很慢。我将我的INNODB缓冲池设置为2GB,而整个数据库只有350MB左右,因此缓冲池中有足够的空间来加载整个数据库。我可以从INNODB统计数据中看到,目前只有大约一半的缓冲池被使用。我找到了预加载数据的引用资料,也称为“预热”缓冲池,例如QuicklypreloadingInnodbtablesinthebufferpool或mysqldump.

mysql - 如何使用 MySQL 将表预加载到 INNODB 缓冲池中?

我有一个使用MySQL的电子商务应用程序,我希望它更快。当在之前访问过的网站上访问某个部分#时,该部分加载很快,因为所有必要的数据都已经在INNODB缓冲池中。但是,如果以前从未加载过#部分,则该数据还不在缓冲池中,因此需要从磁盘读取,这很慢。我将我的INNODB缓冲池设置为2GB,而整个数据库只有350MB左右,因此缓冲池中有足够的空间来加载整个数据库。我可以从INNODB统计数据中看到,目前只有大约一半的缓冲池被使用。我找到了预加载数据的引用资料,也称为“预热”缓冲池,例如QuicklypreloadingInnodbtablesinthebufferpool或mysqldump.

mysql - 如何确定上次更改 InnoDB 表的时间?

我过去曾成功地将数据库查询的(大量)处理结果存储在memcached中,使用基础表的最后更新时间作为缓存键的一部分。对于MyISAM表,上次更改时间在SHOWTABLESTATUS中可用。不幸的是,对于InnoDB表,这通常为NULL。在MySQL4.1中,InnoDB在其SHOWTABLESTATUS行中的ctime通常是其实际的最后更新时间,但对于MySQL5.1来说似乎并非如此。表中有一个DATETIME字段,但它只显示一行被修改的时间-它不能显示不再存在的行的删除时间!所以,我真的不能使用MAX(update_time)。这是真正棘手的部分。我有许多我确实从中读取的副本。我可以

mysql - 如何确定上次更改 InnoDB 表的时间?

我过去曾成功地将数据库查询的(大量)处理结果存储在memcached中,使用基础表的最后更新时间作为缓存键的一部分。对于MyISAM表,上次更改时间在SHOWTABLESTATUS中可用。不幸的是,对于InnoDB表,这通常为NULL。在MySQL4.1中,InnoDB在其SHOWTABLESTATUS行中的ctime通常是其实际的最后更新时间,但对于MySQL5.1来说似乎并非如此。表中有一个DATETIME字段,但它只显示一行被修改的时间-它不能显示不再存在的行的删除时间!所以,我真的不能使用MAX(update_time)。这是真正棘手的部分。我有许多我确实从中读取的副本。我可以

mysql - 试图了解 InnoDB 表上的 MySQL 死锁

我试图了解MySQL在并发客户端处理相同表时发现的死锁。这是“SHOWInnoDBSTATUS”命令的有趣部分:------------------------LATESTDETECTEDDEADLOCK------------------------12070416:17:51***(1)TRANSACTION:TRANSACTION03547576,ACTIVE0sec,processno10886,OSthreadid140547111458560insertingmysqltablesinuse1,locked1LOCKWAIT2lockstruct(s),heapsize36

mysql - 试图了解 InnoDB 表上的 MySQL 死锁

我试图了解MySQL在并发客户端处理相同表时发现的死锁。这是“SHOWInnoDBSTATUS”命令的有趣部分:------------------------LATESTDETECTEDDEADLOCK------------------------12070416:17:51***(1)TRANSACTION:TRANSACTION03547576,ACTIVE0sec,processno10886,OSthreadid140547111458560insertingmysqltablesinuse1,locked1LOCKWAIT2lockstruct(s),heapsize36

mysql - InnoDB 中的 'update tokens set tokens = tokens + 1' 是原子的吗?

在不使用显式事务的情况下,是:updatetokenssettokens=tokens+1保证在InnoDB中是原子的? 最佳答案 我的理解是,在自动提交模式(即“没有显式事务”)下,单个语句就是一个事务。由于事务按照定义是原子的,因此您的单个语句也是原子的。但是,当涉及到评估约束时,这不是在语句(即事务)级别上完成的,而是在处理语句时逐行完成的。如果您在tokens列上有唯一约束(索引),则该更新很可能因此失败。对于引用同一个表的外键也是如此。 关于mysql-InnoDB中的'upd