草庐IT

innodb_doublewrite

全部标签

mysql - 如何检查 MySQL 表是否为 UTF-8 且具有 storageEngine InnoDB?

四处搜索只能找到从一种格式更改为另一种格式的说明,但我似乎无法找到确切的方法来确定我首先拥有哪些。我该怎么做:检查表有什么字符编码?检查表使用什么存储引擎?检查所有表是否都是某种编码?检查所有表是否都有特定的存储引擎? 最佳答案 您可以使用information_schema来了解每个表的引擎。selecttable_name,enginefrominformation_schema.tableswheretable_schema='your_database'对于你可以使用的编码showcreatetabletable_name或

mysql - 如何提高大型 InnoDB 表的 DELETE FROM 性能?

我有一个相当大的InnoDB表,其中包含大约1000万行(并且不断增加,预计会变成该大小的20倍)。每行不是那么大(平均为131B),但有时我不得不删除其中的一大块,这需要很长时间。这是表结构:CREATETABLE`problematic_table`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`taxid`int(10)unsignedNOTNULL,`blastdb_path`varchar(255)NOTNULL,`query`char(32)NOTNULL,`target`int(10)unsignedNOTNULL,`score

mysql - 如何提高大型 InnoDB 表的 DELETE FROM 性能?

我有一个相当大的InnoDB表,其中包含大约1000万行(并且不断增加,预计会变成该大小的20倍)。每行不是那么大(平均为131B),但有时我不得不删除其中的一大块,这需要很长时间。这是表结构:CREATETABLE`problematic_table`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`taxid`int(10)unsignedNOTNULL,`blastdb_path`varchar(255)NOTNULL,`query`char(32)NOTNULL,`target`int(10)unsignedNOTNULL,`score

mysql - 加快从 MyISAM 到 InnoDB 的转换

我有一个MySQL1.5GBMyISAM表(1.0GB数据,0.5GB索引)正在生产中,我即将转换为InnoDB。由于该表用于生产,我希望尽可能缩短停机时间。我的问题:应该调整哪些MySQL配置选项以加快ALTERTABLEtable_nameENGINE=InnoDB;?还可以使用哪些其他技巧来加快生产数据库表从MyISAM到InnoDB的转换? 最佳答案 设置较大的innodb_buffer_pool_size(2GB或更多)使用shell命令预读旧的myisam数据/索引文件增加innodb_log_file_size(256

mysql - 加快从 MyISAM 到 InnoDB 的转换

我有一个MySQL1.5GBMyISAM表(1.0GB数据,0.5GB索引)正在生产中,我即将转换为InnoDB。由于该表用于生产,我希望尽可能缩短停机时间。我的问题:应该调整哪些MySQL配置选项以加快ALTERTABLEtable_nameENGINE=InnoDB;?还可以使用哪些其他技巧来加快生产数据库表从MyISAM到InnoDB的转换? 最佳答案 设置较大的innodb_buffer_pool_size(2GB或更多)使用shell命令预读旧的myisam数据/索引文件增加innodb_log_file_size(256

mysql - 如何锁定尚不存在的 InnoDB 行?

我如何保证我可以搜索我的数据库中是否存在用户名,然后将该用户名作为新行插入到数据库中,而无需在SELECT和INSERT语句?几乎就像我锁定了一个不存在的行。我想用用户名"Foo"锁定不存在的行,这样我现在可以检查它是否存在于数据库中,如果它不存在则将其插入数据库任何中断。我知道使用LOCKINSHAREMODE和FORUPDATE存在,但据我所知,这只适用于已经存在的行。我不确定在这种情况下该怎么做。 最佳答案 虽然上面的答案是正确的,因为SELECT...FORUPDATE将阻止并发session/事务插入相同的记录,但这并不是

mysql - 如何锁定尚不存在的 InnoDB 行?

我如何保证我可以搜索我的数据库中是否存在用户名,然后将该用户名作为新行插入到数据库中,而无需在SELECT和INSERT语句?几乎就像我锁定了一个不存在的行。我想用用户名"Foo"锁定不存在的行,这样我现在可以检查它是否存在于数据库中,如果它不存在则将其插入数据库任何中断。我知道使用LOCKINSHAREMODE和FORUPDATE存在,但据我所知,这只适用于已经存在的行。我不确定在这种情况下该怎么做。 最佳答案 虽然上面的答案是正确的,因为SELECT...FORUPDATE将阻止并发session/事务插入相同的记录,但这并不是

mysql - 为什么当有几个索引时,MySQL InnoDB 对大表的插入/更新会变得非常慢?

我们有一系列已经有机地增长到数百万行的表,在生产中执行插入或更新可能需要两秒钟。但是,如果我转储该表并从转储中重新创建它,查询会快如闪电。我们通过创建一个重建索引的副本重建了其中一个表,然后进行重命名切换并复制任何新行,这是有效的,因为该表只被附加到。这样做可以使插入和更新变得闪电般快速。我的问题:为什么插入会随着时间变慢?为什么重新创建表并进行导入可以解决这个问题?有什么方法可以在不锁定表进行更新的情况下重建索引? 最佳答案 好像是这样的随着时间的推移索引失衡磁盘碎片内部innodb数据文件碎片您可以尝试analyzetablef

mysql - 为什么当有几个索引时,MySQL InnoDB 对大表的插入/更新会变得非常慢?

我们有一系列已经有机地增长到数百万行的表,在生产中执行插入或更新可能需要两秒钟。但是,如果我转储该表并从转储中重新创建它,查询会快如闪电。我们通过创建一个重建索引的副本重建了其中一个表,然后进行重命名切换并复制任何新行,这是有效的,因为该表只被附加到。这样做可以使插入和更新变得闪电般快速。我的问题:为什么插入会随着时间变慢?为什么重新创建表并进行导入可以解决这个问题?有什么方法可以在不锁定表进行更新的情况下重建索引? 最佳答案 好像是这样的随着时间的推移索引失衡磁盘碎片内部innodb数据文件碎片您可以尝试analyzetablef

mysql - 表的存储引擎不支持修复。 InnoDB 还是 MyISAM?

修复我的数据库后,我收到以下错误:scode_tracker.ap_visitsnote:Thestorageengineforthetabledoesn'tsupportrepairscode_tracker.visit_lengthnote:Thestorageengineforthetabledoesn'tsupportrepair我发现表的类型是InnoDB。另一张表是MyISAM,修复成功。在这里阅读了一些主题后,解决方案是将其更改为MyISAM。我对InnoDB和MyISAM了解不多。我在创建表时没有指定类型。所以我的问题是我应该使用MyISAM而不是InnoDB吗?如果是