标签: myisam

频繁查询缓存失效的开销值得吗?

我目前正在研究一个 MySQL 数据库,我们看到查询缓存中有大量无效,主要是因为在许多表上执行了大量的 INSERT、DELETE 和 UPDATE 语句。

我要确定的是,允许将查询缓存用于针对这些表运行的 SELECT 语句是否有任何好处。由于它们很快就失效了,在我看来,最好的办法是在这些表的 SELECT 语句上使用 SQL_NO_CACHE。

频繁失效的开销值得吗?

编辑:应以下用户@RolandoMySQLDBA 的要求,这里是有关 MyISAM 和 INNODB 的信息。

数据库

  • 数据大小:177.414 GB
  • 索引大小:114.792 GB
  • 表大小:292.205 GB

我的ISAM

  • 数据大小:379.762 GB
  • 索引大小:80.681 GB
  • 表大小:460.443 GB

附加信息:

  • 版本:5.0.85
  • 查询缓存限制:1048576
  • query_cache_min_res_unit:4096
  • 查询缓存大小:104857600
  • query_cache_type:开启
  • query_cache_wlock_invalidate:关闭
  • innodb_buffer_pool_size: 8841592832
  • 24GB 内存

mysql innodb myisam performance cache

23
推荐指数
1
解决办法
9977
查看次数

默认情况下,mysqldump 是否导出索引?

我在 mysqldump 上玩了一会儿,我想知道它是否默认导出索引 ( FULLTEXT, INDEX,...)。我阅读了它,我找到了这个选项

--disable-keys, -K
Run Code Online (Sandbox Code Playgroud)

这表明,它实际上确实导出了索引。但我不想相信我的解释,我想确保我做对了(或错了;-))。任何人都可以确认吗?

mysql myisam mysqldump index export

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

DELETE 命令未在 30,000,000 行表上完成

我继承了一个数据库,并希望对其进行清理和加速。我有一个包含 30,000,000 行的表,其中许多是由于我们程序员的错误而插入的垃圾数据。在添加任何新的、更优化的索引之前,我将表从 MyISAM 转换为 InnoDB,并希望删除大量包含垃圾数据的行。

数据库是 MySQL 5.0,我有服务器的 root 访问权限。我首先通过 Adminer 运行这些命令,然后通过 phpMyAdmin 运行,结果相同。

我正在运行的命令是,

DELETE
FROM `tablename`
WHERE `columnname` LIKE '-%'
Run Code Online (Sandbox Code Playgroud)

本质上,删除此列中以 dash 开头的任何内容-

它运行了大约 3-5 分钟,然后当我查看进程列表时,它消失了。

然后我跑,

SELECT *
FROM `tablename`
WHERE `columnname` LIKE '-%'
Run Code Online (Sandbox Code Playgroud)

它返回数百万行。

为什么我的删除语句没有完成?

PS,我知道 MySQL 5.0 已经过时了。我正在将数据库移动到 MySQL 5.6 w InnoDB(可能是 MariaDB 10 w XtraDB),但在此之前,我希望按原样使用 DB 来回答这个问题。

——

编辑已删除,请参阅我的答案。

mysql innodb myisam delete mysql-5.0

22
推荐指数
4
解决办法
4万
查看次数

最好的 MyISAM 和 InnoDB

由于 RAM 的限制,是否可以让 InnoDB 使用与 MyISAM 相同的索引而不是聚集索引,同时获得其并发性能的好处?

mysql innodb myisam performance index

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

使用索引日期时间列的 MySQL 性能问题

我试图解决以下问题大约一个小时,但仍然没有进一步解决。

好的,我有一张桌子(MyISAM):

+---------+-------------+------+-----+-------------------+----------------+
| Field   | Type        | Null | Key | Default           | Extra          |
+---------+-------------+------+-----+-------------------+----------------+
| id      | int(11)     | NO   | PRI | NULL              | auto_increment |
| http    | smallint(3) | YES  | MUL | 200               |                |
| elapsed | float(6,3)  | NO   |     | NULL              |                |
| cached  | tinyint(1)  | YES  |     | NULL              |                |
| ip      | int(11)     | NO   |     | NULL              |                |
| date    | timestamp   | …
Run Code Online (Sandbox Code Playgroud)

mysql myisam performance optimization datetime

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

从 MyISAM 在线转换为 InnoDB 后行丢失

我们有一个相当小的数据库,我们想将它从 MyISAM 转换为 InnoDB。作为数据库新手,我们只是转换(使用alter table),甚至没有关闭站点。

现在转换完成了,很多断断续续的行似乎丢失了。这可能是由于转换期间的操作造成的吗?还是其他地方的问题?

mysql innodb myisam

16
推荐指数
2
解决办法
4264
查看次数

为什么 MySQL 在磁盘上创建这么多临时表?

任何配置错误是否会导致 mysql..mysql 调谐器显示创建过多的临时表

Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk

table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache hit rate is 3%
Run Code Online (Sandbox Code Playgroud)

早期的临时表是“在 23725 个临时表中 38% 是在磁盘上创建的”,但我将 max_heap 和 tmp_table 从 16m 更改为 200m 并降低到 30%。

配置:

engine myisam 
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam memory

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

使用 InnoDB 引擎输入几场演出后,MySQL LOAD DATA INFILE 速度降低了 80%

我正在通过 LOAD DATA INFILE 加载一个 100GB 的文件。我在 MyISAM 上取得了很好的成功,几个小时就完成了。

我现在正在尝试使用 InnoDB。负载以超过 10MB/秒的速度快速启动(观察表文件增长,file_per_table已打开)。

但是在大约 5GB 的数据之后它会减慢到 2-4MB/秒的范围,当我超过 20GB 时它会下降大约 2MB/秒。

InnoDB 缓冲池大小为 8G。在运行 LOAD DATA INFILE 命令之前,我已经完成了以下操作:

SET @@session.sql_log_bin=0;
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
alter table item_load disable keys;
//Run LOAD DATA INFILE....
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它开始良好并随着时间的推移放缓。

此外,使用相同的设置,我使用 InnoDB 和 MyISAM 以及 5GB 测试数据集对表运行相同的 LOAD DATA INFILE 命令,MyISAM 速度提高了 20 倍:

InnoDB:

mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (21 …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam performance

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

MySQL命令查询所有MyISAM数据库

如果有人可以帮助我了解 MySQL 中查询所有数据库以获取“MyISAM”引擎的正确命令,我将不胜感激。我需要将所有数据库和表从 MyISAM 转换为 InnoDB。

mysql innodb myisam

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

在同一台物理服务器上运行复制是不明智的吗?

我正在考虑为我的数据库设置主从复制。从服务器将用于冗余和可能的报告服务器。但是,我遇到的最大问题之一是我们的数据中心已经用尽了电源。因此,添加另一台物理服务器不是一种选择。

就 CPU 而言,我们现有的数据库服务器的利用率相当低(四核上的平均负载从未真正超过 1)。所以主要的想法是放入一些新驱动器并将内存加倍(从 8GB 到 16),并在同一台物理机器上运行第二个 mysql 实例。每个实例都有单独的数据库磁盘。

这个想法有什么问题吗?

编辑(更多信息):我(幸运的是)从来没有发生过任何足以关闭服务器的事情,但我正在努力提前计划。我们当然有可以从中恢复的每晚备份。但我认为,如果主服务器的驱动器出现故障(如果整台机器出现故障,显然不会),将冗余数据放在单独的磁盘上会提供更快的解决方案。

至于报告方面,我们要报告的任何表都是 MyIsam。因此,在正在写入的同一表上进行昂贵的读取可能会使服务器陷入困境。我的假设是,只要我们在主服务器上投入足够的 RAM(因为 cpu 负载还不是问题),有一个要报告的从服务器就不会影响主服务器。

mysql myisam replication

13
推荐指数
2
解决办法
4433
查看次数