mysql - mySQL 的速度和调整(10 亿行)

标签 mysql sql optimization database-administration database-tuning

我的公司有一个分析师团队使用的 mySQL 服务器(通常一次有 3-4 个)。最近,对于包含多达 10 亿行(10^9 条记录)的表的数据库,查询速度变慢了,其中一些查询甚至需要几天时间。

  • 服务器主要特点:Linux 操作系统 - 64 GB 内存 - 3 TB 硬盘。

我们对微调一无所知,因此欢迎任何工具/经验法则来找出导致问题的原因或至少缩小范围。

转到 Workbench studio>Table inspector,我发现了我们最常使用的数据库的这些关键值:

  • 数据库大小:~500 GB
  • 最大表大小:~80 GB
  • 索引长度(对于最大的表):~230 GB。该索引依赖于 6 个字段。
  • 几乎没有 MyISAM 表,都是 InnoDB

理想情况下,我想以最简单的方式微调服务器(更好)、数据库(更差)或两者(将来),以加快速度。

我的问题:

  1. 这些值(500、80、230 GB)是否正常且可管理? 中型服务器?
  2. 索引大小为 -230Gb- 比表本身大很多是正常的吗?
  3. 可以调整哪些参数/策略来解决这个问题?我正在考虑内存日志或购买服务器 RAM,但很乐意调查任何明智的答案。

非常感谢。

最佳答案

如果您正在管理这种规模的 MySQL 实例,那么值得花时间阅读 High Performance MySQL这是关于 MySQL 调优的最好的书。我强烈建议您获取并阅读这本书。

您的 InnoDB 缓冲池可能仍处于默认大小,没有利用 Linux 系统上的 RAM。如果您没有配置 MySQL 来使用它,那么您有多少 RAM 都没有关系!

还有其他重要的调整参数。 MySQL 5.7 Performance Tuning Immediately After Installation是对最重要的调整选项的精彩介绍。

索引可以比表本身大。将近 4 比 1 的比例很不寻常,但不一定是坏事。这取决于您需要哪些索引,除非您考虑需要针对此数据运行的查询,否则无法知道这一点。

我做了演示 How to Design Indexes, Really几年前(它与当前版本的 MySQL 一样相关)。这是视频:https://www.youtube.com/watch?v=ELR7-RdU9XU

关于mysql - mySQL 的速度和调整(10 亿行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45172102/

相关文章:

php - 如何使用php统计搜索结果

sql - SQL:如何基于最大日期时间为多个ID选择单个记录?

sql - 使用先前在同一 SQL 语句中定义的列短名称

python - 如何在 Django 中有效地使用 _set.all()?

c++ - C++性能测量中的一些问题

mysql - 如何临时更改 MySQL 中的值

C# Mysql 创建表名带空格

mysql - grails findAll 条件或 executeQuery

sql - 在特定模式下编写所有 SQL 对象的脚本

c++ - 贝塞尔曲线绘制例程到定点(如何重写)