标签: myisam

MySQL 仍然以这种方式处理索引吗?

在 MySQL 中删除重复索引需要很长时间,所以在我等待的时候,我搜索了它并找到了 2006 年的这篇文章,谈论 MySQL 如何处理ADDDROP索引。

如果表 T 是具有四个索引(ndx1、ndx2、ndx3、ndx4)的 MySQL 表,并且您想“更改表 T 删除索引 ndx3;” 这正是幕后发生的事情:

1) MySQL 将 T.MYD 复制到临时表,即 S.MYD 和零字节 S.MYI。2) MySQL 确实 'alter table S add index ndx1 (...); 3) MySQL 确实 'alter table S add index ndx2 (...); 4) MySQL 'alter table S add index ndx4 (...); 5) MySQL 删除 T.MYD 并删除 T.MYI 6) MySQL 将 S.MYD 重命名为 T.MYD,并将 S.MYI 重命名为 T.MYI

这仍然是真的吗?他的建议是否仍然有效?

给定具有四个索引(ndx1、ndx2、ndx3、ndx4)的同一个 MyISAM 表 T 并且您想“更改表 T …

mysql myisam performance index

8
推荐指数
1
解决办法
1075
查看次数

大量插入的 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  |     | NULL    |       |
| sa    | …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam optimization mysql-5.5

8
推荐指数
1
解决办法
3589
查看次数

你还在使用 MyISAM 还是更喜欢 Aria 存储引擎?

如果 Aria 存储引擎(以前称为 Maria)是“新的”MyISAM,它支持事务和自动崩溃恢复:

  • 为什么仍然使用 MyISAM ?
  • 将存储引擎从 MyISAM 更改为 Aria 是一个问题吗?(丢失索引什么的)

mysql myisam mariadb storage-engine percona-server

8
推荐指数
1
解决办法
1万
查看次数

为 MyISAM 表设置复制?

在 MySQL 中设置复制之前,首先需要将数据传输到从属设备。

由于 MyISAM 表可以作为文件复制。可以将 MyISAM 文件 .myd .myi .frm 复制到从站吗?这足以开始复制吗?

mysql myisam replication

8
推荐指数
1
解决办法
7413
查看次数

我可以有一个 InnoDB master 和 MyISAM slaves with Full-Text 进行搜索吗?

我想在 master 上使用 InnoDB,因为它的事务能力,但 MyISAM 在 slaves 上使用全文搜索能力。这可能吗?

mysql innodb myisam replication full-text-search

8
推荐指数
1
解决办法
2989
查看次数

Percona xtrabackup 是我 500GB MySQL 备份的正确选择吗?

我有一个 500GB 的 MySQL 数据库,主要由 Innodb 表和一个大 (200GB) MyISAM 表组成。我当前的备份策略是将 db 文件复制到外部硬盘驱动器。这会导致约 4 小时的停机时间。我的需求:

  1. 低成本。
  2. 恢复时间可能很长。无需实时复制。
  3. 可以处理 1 周到 2 周范围内的数据丢失。
  4. 希望备份的停机时间尽可能短,但最多可以忍受 2 小时。

目前正在考虑尝试迁移到 Percona xtrabackup。它是否适合我的用例?我特别担心它会锁定 MyISAM 表和学习曲线。

mysql innodb myisam backup xtrabackup

8
推荐指数
1
解决办法
6457
查看次数

TRUNCATE TABLE 语句有时会挂起

为什么TRUNCATE TABLE语句有时会挂起?出现此类问题的原因是什么?

我正在从 MySQL 迁移到 MariaDB。这个问题不会发生在 MySQL 上,只有发生在 MariaDB 上。

悬挂声明很简单:

TRUNCATE TABLE sampledb.datatable;
Run Code Online (Sandbox Code Playgroud)

什么会导致这种情况发生,我该如何解决?

另一种观察是如果表有一些数据,可能是一两行,那么截断查询成功。否则表有很多数据,查询就挂了。

mysql myisam mariadb truncate

8
推荐指数
3
解决办法
3万
查看次数

启动/停止 MySQL

我正在寻求帮助以了解执行以下命令行时会发生什么:

root@prodn$ service mysqld stop
Run Code Online (Sandbox Code Playgroud)

是的,它会关闭 MySQL 服务器,因此在服务再次启动之前无法再访问它。但是,更具体地说,服务停止时是否还会发生其他情况?请原谅我的新手,但是当mysqld重新启动时,是否意味着日志已刷新、一些内存已释放、缓存已清空等?

我问的原因如下:

我们的数据仓库 DB 是 MySQL DB,在过去的 4 个月中,平均需要 8.5 小时。

上周三,我已经停止了 mysql 服务,然后在 30 分钟后重新启动了它。从那时起,我开始注意到整体性能的巨大改进——SELECT/INSERT/UPDATE/DELETE 过程更加高效。DW 以相同数量的数据行提前近 4 小时完成

然而,随着时间的流逝,15-20 分钟不知何故被添加到完成时间。所以,我怀疑我可能必须每周重新启动服务。

这种行为有解释吗?我不知道还有哪些其他问题是相关的,但是知道mysqld服务重新启动时会发生什么会很棒。

任何人都可以对此有所了解吗?

mysql myisam performance shutdown

8
推荐指数
1
解决办法
919
查看次数

针对 MyISAM 表并发使用的 LOAD DATA INFILE 块

我在使用LOAD DATA INFILE. 加载操作单独运行正常。尝试LOAD DATA INFILE并发执行操作,会阻塞 – MySQL 分析信息中的系统锁 – 直到前一个完成。这与加载到相同/不同的表,甚至不同的数据库中无关。InnoDB 没有同样的问题,但是,MyISAM 似乎更适合纯日志记录表。

可以LOAD DATA INFILE在 MySQL 上使用 MyISAM 引擎进行并发操作吗?我是否缺少一些关键设置(DISABLE KEYS 是针对空数据库自动执行的)?在 MySQL 5.1.63 和 5.5.14 上测试。

我希望同时加载LOAD DATA INFILE到不同的表是高性能的,但是,性能却被完全破坏了。


复制我的场景:

SQL

CREATE DATABASE test;
CREATE TABLE `log_isam` (
  `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `num` int(11) DEFAULT NULL,
  `surname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam

7
推荐指数
1
解决办法
1035
查看次数

MySQL 5.1 到 5.6:巨大的性能冲击

好吧,这可能是三个问题。我想将使用 MyISAM 的现有 MySQL 5.1 数据库移动到使用 InnoDB 的 5.6,因为我认为有很多明显的 - 甚至可能是好的 - 原因。

这是在 Amazon RDS 上,所以我的升级路线仅限于转储和重新创建数据库。

我会欣然承认我不是一个老练的 DBA。

问题 1:哇这么慢!

大约需要 15 分钟 mysqldump我们的 1.6 亿多行。(表演桌等来了,抱紧你的马。)

花了大约 50 个小时加载到 mysql 5.6 实例中,并且引擎巧妙地将 sed-script-ed 加载到 InnoDB。

问题 2:我的行在哪里?

select count(*) from node;在目前的 DB 上给出了大约 1.62 亿。在5.6上,它给出了大约9300万。加载似乎是成功的,尽管我无法证明;至少,加载终止后没有错误消息。

如果它不成功,那真的慢。

问题 3:这么慢!

因此,select count(*) from node;在 5.1 上几乎没有任何时间完成——查询结果在 0.00 到 0.03 秒之间。在使用 InnoDB 的 5.6 上,这需要一分钟多的时间。解释清楚地表明这是因为查询优化的方式不同——但不清楚为什么不同。

表格和说明

MySQL 5.1

mysql> show …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam mysqldump performance

7
推荐指数
1
解决办法
6340
查看次数