Questions tagged «myisam»

MyISAM是MySQL的非事务存储引擎。它提供了高速存储和检索以及全文搜索功能。此外,它是5.5之前的MySQL版本的默认存储引擎类型。

3
为什么MySQL表崩溃?我该如何预防?
我是Moodle网站的管理员,该网站的Users表损坏了,因此无法使用。 幸运的是,一个简单的方法REPAIR TABLE mdl_user使它可以再次工作。问题是我不知道为什么它实际上崩溃了并使它无法使用,我想确保下次可以更好地进行准备。 我不是一个经验丰富的DBA,我只是做很多事情的开发人员,所以请多多包涵。 我可以恢复备份,但是我想有防止崩溃的方法。 这些表是utf8_general_ci并使用MyISAM。 为什么MySQL表崩溃?我该怎么做才能防止这种情况发生?
9 mysql  myisam 

4
MySQL为什么会产生这么多临时MYD文件?
在托管许多PHP / MySQL网站(照相馆)的Debian Linux服务器上,有时我有“许多”文件,例如/tmp/#sql_6405_58.MYD。 例如今天: [2012-12-15 15:18:11] /tmp/#sql_6405_6.MYD : 88MB [2012-12-15 15:18:11] /tmp/#sql_6405_3.MYD : 22MB [2012-12-15 15:18:11] /tmp/#sql_6405_4.MYD : 138MB [2012-12-15 15:18:11] /tmp/#sql_6405_10.MYD : 88MB ... [2012-12-15 15:18:11] /tmp/#sql_6405_9.MYD : 15MB [2012-12-15 15:18:11] /tmp/#sql_6405_65.MYD : 49MB [2012-12-15 15:18:11] /tmp/#sql_6405_44.MYD : 69MB (同时59个文件,超过6GB ...是的,我监视/ tmp中的大文件) 不幸的是,/tmp它位于同一个分区,/并且临时中断了Web服务器,因为/我想它已满。然后文件消失,服务器恢复正常。 所有文件名都遵循该#sql_6405_*.MYD模式。我想了解哪个MySQL操作意味着这么多的临时文件。我在此服务器上大约有2000个数据库。是否可以知道与哪个数据库有关?

2
优化MySQL SELECT语句中TIMESTAMP字段的WHERE条件
我正在为一个跟踪使用时间的分析系统设计一个模式,并且需要查看特定日期范围内的总使用时间。 举一个简单的例子,这种查询类型将经常运行: select sum(diff_ms) from writetest_table where time_on > ("2015-07-13 15:11:56"); 在人口众多的表上,此查询通常需要7秒钟左右。它有约3500万行,运行在Amazon RDS(db.m3.xlarge)上的MySQL上的MyISAM。 摆脱WHERE子句可以使查询仅花费4秒,而添加第二个子句(time_off> XXX)则需要增加1.5秒,从而使查询时间达到8.5秒。 因为我知道通常会完成这些类型的查询,所以我想优化一些东西,使其更快,最好在5秒以下。 我从在time_on上添加索引开始,尽管它大大加快了WHERE“ =”查询,但对“>”查询没有影响。有没有一种方法可以创建可以加快WHERE“>”或“ <”查询的索引? 或者,如果还有其他建议可以查询此类查询的性能,请告诉我。 注意:我使用“ diff_ms”字段作为非规范化步骤(它等于time_off-time_on),这将聚合的性能提高了大约30%-40%。 我正在使用以下命令创建索引: ALTER TABLE writetest_table ADD INDEX time_on (time_on) USING BTREE; 在原始查询上运行“ explain”(使用“ time_on>”)时,time_on是“ possible_key”,而select_type是“ SIMPLE”。“额外”列显示“在何处使用”,“类型”为“全部”。添加索引后,该表显示“ time_on”是“ MUL”键类型,由于同一时间可以出现两次,因此这似乎是正确的。 这是表模式: CREATE TABLE `writetest_table` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, …

2
MySQL为什么要进行串行同步I / O?
当在MyISAM表上查看一个特别烦人的查询时,在许多情况下要花很长时间才能执行,我注意到MySQL似乎暴露出一种相当奇怪的I / O模式:执行单个查询时,必须要做很多事情I / O量(例如,对于表扫描或由于高速缓存而导致缓存为空,echo 3 > /proc/sys/vm/drop_caches因此需要首先从磁盘加载索引)时,基础块设备的队列大小接近于值1,而性能则极差仅4-5 MB / s: root@mysql-test:~# iostat -xdm 5 /dev/sda Linux 3.2.0-40-generic (mysql-test) 04/30/2014 _x86_64_ (4 CPU) Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.14 24.82 18.26 88.79 0.75 4.61 102.56 2.83 26.39 19.29 27.85 2.46 …

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/

1
启动/停止MySQL
我正在寻求帮助,以了解执行以下命令行时会发生什么: root@prodn$ service mysqld stop 是的,它关闭了MySQL服务器,因此直到再次启动该服务后,对它的访问不再可用。但是,更具体地说,停止服务时还会发生其他情况吗?请原谅我的新手,但是当mysqld重新启动时,是否表示日志已刷新,部分内存已释放,缓存已清空等? 我问的原因如下: 我们的数据仓库数据库是MySQL数据库,在过去的4个月中,平均花费了8.5个小时。 上星期三,我停止了mysql服务,然后在30分钟后重新启动它。从那以后,我开始注意到整体性能有了巨大的提高 -SELECT / INSERT / UPDATE / DELETE流程更加高效。DW在差不多4个小时前完成了相同数量的数据行 但是,随着时间的流逝,完成时间会增加15-20分钟。因此,我怀疑我可能必须每周重新启动该服务。 有这种行为的解释吗?我不知道还有什么其他问题,但是很高兴知道mysqld服务重启时会发生什么。 谁能对此有所启发?


2
大量插入的InnoDB表不会使用我所有的CPU
我有一个数据包日志数据库,几乎从未查询过。它只需要在插入时快速。我之所以使用InnoDB,是因为我想保持ACID合规性,因为即使丢失单个数据包也可能损害我们的客户。在性能调整方案中,我通过多个数据库连接将1,000,000个数据包发送到服务器。但是,无论我在my.cnf中使用什么设置,我都无法使mysqld进程在具有12个核心的系统上使用超过900%的CPU。(盒子上没有其他东西。) 我设置了以下内容 innodb_file_per_table = 1 innodb_write_io_threads = 64 innodb_read_io_threads = 64 innodb_thread_concurrency = 0 如果使用MyISAM,则可以在大约6秒钟内获得所有写入的数据包。但是InnoDB大约需要25。我可以让MySQL使用其余的系统资源并更快地插入吗? 编辑:这是表的架构: +-------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+-------+ | t | bigint(20) unsigned | YES | | NULL | | | a | char(1) | YES | …

2
使用MyISAM和InnoDB引擎的数据库的一致逻辑备份
我对使用MyISAM和InnoDB的MySQL数据库的逻辑备份有疑问。 该mysqldump实用程序支持以下两个选项: --single-transaction-通过在单个事务中转储所有表来创建一致的快照。daccess-ods.un.org daccess-ods.un.org仅适用于存储在支持多版本的存储引擎中的表(当前仅InnoDB支持)。option自动关闭--lock-tables。 -x, --lock -all-tables-锁定所有数据库中的所有表。这可以通过在整个转储期间使用全局读锁定来实现。自动关闭--single-transaction和--lock-tables。 对于InnoDB,我们需要 --single-transaction 对于MyISAM,我们需要-锁定表或全部锁定表(以防需要跨数据库一致性)。 那么,应该如何备份混合数据库(同时使用MyISAM和InnoDB引擎的数据库)? 编辑: 为了澄清起见,可以将问题改写为: lock- [all-] tables选项是否可以保证InnoDB表的一致性备份?

1
MySQL是否仍以这种方式处理索引?
在MySQL中删除重复索引需要花费相当长的时间,因此在等待期间,我进行了搜索并找到了2006年以来的这篇文章,谈论MySQL如何处理ADD和建立DROP索引。 如果表T是具有四个索引(ndx1,ndx2,ndx3,ndx4)的MySQL表,并且您想“更改表T的删除索引ndx3;” 这正是幕后发生的事情: 1)MySQL将T.MYD复制到临时表,即S.MYD和零字节的S.MYI。2)MySQL确实在表S上添加了索引ndx1(...);3)MySQL确实在表S上添加了索引ndx2(...);4)MySQL确实在表S上添加了索引ndx4(...);5)MySQL删除T.MYD并删除T.MYI 6)MySQL将S.MYD重命名为T.MYD,并将S.MYI重命名为T.MYI 这仍然是真的吗?他的建议仍然有效吗? 给定具有四个索引(ndx1,ndx2,ndx3,ndx4)的同一MyISAM表T,并且您要“更改表T的删除索引ndx3;” 试试这个代替: 1)创建像T一样的表T1;这将创建一个具有索引ndx1,ndx2,ndx3和ndx4的空表T1。2)alter table T1丢弃索引ndx3; 这会将索引ndx3丢弃在空T1上,该索引应该是瞬时的。3)插入T1中,从T中选择*;这将填充表T并一次性加载T1的所有三(3)个索引。4)放表T表;5)将alter table T1重命名为T; 大家如何处理大表中的索引添加和删除?
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.