Questions tagged «innodb»

InnoDB:MySQL的符合ACID的存储引擎

2
如何在/etc/my.cnf文件中使binlog-format = ROW成为启动默认值?
我可以运行查询SET GLOBAL binlog_format ='ROW',它适用于该会话。 停止并重新启动MySQL后,如何使该设置生效? 注意:我使用的是MySQL 5.5.19版本(带有Moodle),我刚刚从MyISAM升级到InnoDB,因此需要此新设置。 我尝试将这两个命令(分别)添加到my.cnf:binlog-format = ROW和binlog_format = ROW,但都不起作用。每次更改my.cnf时,我都会停止并重新启动MySQL。 我未设置此错误而得到的错误是邪恶的错误消息: 调试信息:无法执行语句:由于BINLOG_FORMAT = STATEMENT,并且至少一个表使用了仅限于基于行的日志记录的存储引擎,因此无法写入二进制日志。当事务隔离级别为READ COMMITTED或READ UNCOMMITTED时,InnoDB仅限于行记录。
9 mysql  innodb  my.cnf 

1
服务器并发truncate命令崩溃后,MySQL INNODB损坏
我认为我的服务器今天崩溃了,原因是我们的一个INNODB表上有一个并发的truncate table命令。服务器可以重新启动,但是在启动之后,每次我尝试发出SQL命令时,都会出现以下错误: ERROR 2006 (HY000): MySQL server has gone away 这是在日志中发生的事情: 121206 01:11:12 mysqld restarted 121206 1:11:13 InnoDB: Started; log sequence number 275 559321759 InnoDB: !!! innodb_force_recovery is set to 1 !!! 121206 1:11:13 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.0.95-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution InnoDB: Error: trying …

1
Amazon RDS MySQL 5.5 Innodb Lock超过等待超时
自从移至Amazon RDS以来,我们就遇到了一些非常疯狂的性能问题,而今天我们开始遇到锁定问题。因此,我认为这只是超时问题,因此检查了我们使用的内存。我们交换了大约70MB的内存。我用mysqltuner进行了一次内存巫婆搜索,它说最大可能的内存使用率为400%。现在,由于Percona的配置向导,我将其降低到100%以上。 但是,我们仍然存在此锁定问题,因此我假设它与内存/交换无关。为什么我仍然收到停工通知?这里发生了什么? 我相信重新启动可以解决问题,但这不应该是解决方案。将来我们可以做些什么来防止这种情况发生?我尝试刷新查询缓存和表-起作用了。 多亏了RDS:/ 我可以提供以下大量信息: 查询 INSERT INTO `myTable` (`firstName`, `lastName`, `email`) VALUES ('Travis', 'B...', '...@gmail.com') 错误信息 Lock wait timeout exceeded; try restarting transaction 表架构 CREATE TABLE IF NOT EXISTS `myTable` ( `id` int(15) NOT NULL AUTO_INCREMENT, `firstName` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `lastName` varchar(255) COLLATE utf8_unicode_ci NOT NULL, …

2
Amazon RDS I / O请求-1个查询= 1个可计费I / O?
我有一个要迁移到Amazon RDS上的InnoDB数据库。 我当前的实施托管在我自己的服务器上,每月显示大约800万次查询。 RDS网站说I / O费率为每100万个请求$ 0.10 1个I / O = 1个查询吗?也就是说,我会为此使用量+ RDS费用向我收取$ 80 / mo的费用吗?
9 mysql  innodb 

4
如何提高InnoDB DELETE性能?
因此,我有此审核表(跟踪数据库中任何表上的操作): CREATE TABLE `track_table` ( `id` int(16) unsigned NOT NULL, `userID` smallint(16) unsigned NOT NULL, `tableName` varchar(255) NOT NULL DEFAULT '', `tupleID` int(16) unsigned NOT NULL, `date_insert` datetime NOT NULL, `action` char(12) NOT NULL DEFAULT '', `className` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `userID` (`userID`), KEY `tableID` (`tableName`,`tupleID`,`date_insert`), KEY …

2
选择查询花费的时间超过了原先的时间
我有一个具有近2300万条记录的MySQL数据库表。该表没有主键,因为没有唯一的键。它有2列,均已索引。下面是它的结构: 以下是一些数据: 现在,我运行了一个简单的查询: SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001' 不幸的是,这花费了超过5秒钟才能检索数据并将其显示给我。我的未来表将有1500亿条记录,因此这一次非常高。 我运行Explain命令以查看发生了什么。结果如下。 然后,我使用以下命令运行配置文件。 SET profiling=1; SELECT `indexVal` FROM `key_word` WHERE `hashed_word` = '001'; SHOW profile; 以下是分析的结果: 以下是有关我的表格的更多信息: 那么,为什么要花这么长时间?他们也被索引!将来,我必须运行很多LIKE命令,因此这会花费太多时间。出了什么问题?


2
尽管缺少列但仍使用覆盖指数
我有以下查询,使用MariaDB 10 / InnoDB: SELECT id, sender_id, receiver_id, thread_id, date_created, content FROM user_message WHERE thread_id = 12345 AND placeholder = FALSE ORDER BY date_created DESC LIMIT 20 该查询根据给定的条件获取消息,并按创建日期排序。 我的覆盖范围超过(thread_id, date_created)。 当运行EXPLAIN时,使用正确的索引,尽管查询使用的是语句中间不在索引中的列,但我得到的输出为“在哪里使用”。我可以将任何值用于“占位符= x”,并且结果相同。 如果我将排序更改为使用另一列,则EXPLAIN正确指示“在哪里使用。使用文件排序”。 我正在抓头。有人可以阐明这一点吗?我希望看到的是,由于覆盖列无法完全使用,因此需要额外的文件排序。

2
插入时MySql Gap Lock死锁
当从多个源频繁插入到表中时,我从间隙锁获取死锁。这是我的过程的概述。 START TRANSACTION UPDATE vehicle_image SET active = 0 WHERE vehicleID = SOMEID AND active = 1 Loop: INSERT INTO vehicle_image (vehicleID, vehicleImageFilePath, vehicleImageSplashFilePath ,vehicleImageThumbnailFilePath, vehicleImageMiniFilePath, mainVehicleImage, active) VALUES (%s, %s, %s, %s, %s, %s, 1); END TRANSACTION 的输出SHOW Create table vehicle_image;是: CREATE TABLE `vehicle_image` ( `vehicleImageID` int(11) NOT NULL …

3
在InnoDB表中,将主键作为复合二级索引的最后一列有什么作用?
假设我有一对一的关系(person_id, pet_id)。我有一个表在哪里pet_id是主键。 我了解InnoDB二级索引实际上是一个B树,其中的值是该行的相应主键值。 现在,假设一个人可以养成千上万只宠物,而我经常想要一个人的宠物按顺序排列pet_id。那么,如果在第二个索引记录的排序会的问题(person_id, pet_id)或只是person_id用pet_id的该person_id是无序。猜后来。 因此,如果person_id是非唯一的,记录是按(person_id, pet_id)还是JUST 物理排序的pet_id? 谢谢

2
MySQL不释放内存
在对它执行任何大的插入或选择语句之后,MySQL似乎想将整个表保留在缓存中(表大小=〜20GB)。现在我的innodb缓冲池是20GB。总内存为32GB。我将提供一些内存使用情况以及innodb状态的输出以及mysqltuner的输出。过去几天一直让我发疯。请帮忙!感谢您提供任何反馈意见,如果您需要更多信息,请告诉我。 同样,执行“刷新表”只会关闭并在内存中重新打开它们。至少我认为这是正在发生的事情。这是我执行一堆插入操作之前innodb当前的内存状态: ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 21978152960; in additional pool allocated 0 Dictionary memory allocated 6006471 Buffer pool size 1310719 Free buffers 347984 Database pages 936740 Old database pages 345808 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single …
8 mysql  innodb  memory 

1
如何在MySQL中优化InnoDB表
我一直在研究如何仅在MySQL中优化碎片表,并回顾了有关优化表的文章。基本上,它针对任何表对information_schema数据库执行查询,data_free > 0并OPTIMIZE仅对那些表构建SQL语句。我运行了此查询,它确定了148个表以进行优化。标识的所有表都是InnoDB表。执行结果优化SQL脚本后,我重新运行原始脚本以识别碎片表,并在第一遍过程中返回完全相同的表。 我看到了有关InnoDB表和OPTIMIZE命令的冲突帖子。有人说这OPTIMIZE不适用于InnoDB表,需要运行ALTER TABLE table_name ENGINE=INNODB。其他人则说,针对InnoDB表执行时OPTIMIZE实际上会调用该ALTER TABLE命令。考虑到这一点,我ALTER TABLE对被标识为碎片(data_free > 0)的InnoDB表之一运行了该命令,发现其data_free之后没有改变。它仍然大于0。我还重新启动了MySQL,并检查了它以发现相同的结果。 现在,我们组织中有几台运行MySQL 5.5.29的服务器,我对所有服务器进行了查询,以识别出任何带有InnoDB表且未DATA_FREE=0 or NULL返回任何表。它们都大于零。 我还OPTIMIZE对一些大于零的MyISAM表运行了该命令,DATA_FREE然后验证它是否为零。 谁能为我阐明一下?从InnoDB表中删除碎片的正确方法是什么?确定零散的InnoDB表的正确方法是什么? 谢谢

1
MySQL在巨大的表和简单的SELECT上需要FORCE INDEX
我们有一个应用程序,它将来自不同来源的文章存储在MySQL表中,并允许用户检索按日期排序的那些文章。文章始终按来源进行过滤,因此对于客户端SELECT,我们始终有 WHERE source_id IN (...,...) ORDER BY date DESC/ASC 我们正在使用IN,因为用户有很多订阅(有些订阅有数千个)。 这是articles表的架构: CREATE TABLE `articles` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `source_id` INTEGER(11) UNSIGNED NOT NULL, `date` DOUBLE(16,6) NOT NULL, PRIMARY KEY (`id`), KEY `source_id_date` (`source_id`, `date`), KEY `date` (`date`) )ENGINE=InnoDB AUTO_INCREMENT=1 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT=''; 我们需要(date)索引,因为有时我们在此表上运行后台操作,而没有按源进行过滤。但是,用户无法执行此操作。 该表有大约10亿条记录(是的,我们正在考虑分片以便将来...)。一个典型的查询如下所示: …

1
是什么导致“等待表级锁定”错误?
我们已经使数据库挂起了两次,并试图找到原因。 show processlist Waiting for global read lock | INSERT INTO {myisam_table} ... 在这里,磁盘空间已满,因此我们认为问题已经解决了,但第二天中午又挂起了: show processlist Waiting for table level lock | UPDATE {myisam_table} ... 是什么原因造成的? Mysql默认引擎:InnoDB。 数据库混合了MyISAM和InnoDB引擎的表。 日志发布在这里: http://arturito.net/2013/08/28/mysql-waiting-for-table-level-lock-errors/

2
如何仅从.frm文件提取表架构?
我已经从备份中提取了mysql的数据目录,并且需要从旧表中获取架构,但是它是来自另一台计算机的备份。 我今天已经阅读了很多有关如何执行此操作的教程,但是每次它似乎都失败了,或者由于mysql挂起或崩溃而最终不得不重新安装mysql。我尝试了以下方法: 创建一个不同的数据库 在该数据库中创建具有相同名称的表 替换档案 停止/启动引擎 从.frm文件中恢复 我尝试了各种顺序和组合。 是否有任何外部工具可以从.frm文件中提取模式?如果打开文件,我可以看到列名。我看了一下,但似乎找不到任何能使我做到这一点的东西。 提前致谢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.