我们正在升级FutureStack的注册,仅到4月30日。条款和条件适用。 现在注册

MySQL是一个开源关系数据库系统,如Linux,启动了其历史作为个人侧面项目。在其25年的历史中,MySQL已经获得了显著的吸引力,今天广泛的公司,如索尼超级,用它来运行他们的multi-petabyte关键任务数据库。

在某种程度上,MySQL是其自身成功的受害者。它很容易运行,以至于开发人员可能会想当然地认为它不需要监管。实际上,MySQL是一个复杂的系统,您必须密切监视它的微妙平衡。它揭示了许多您不能错过的有用指标,因为它们突出了瓶颈在哪里、何时需要升级以及应该优化哪些查询。

像大多数关系数据库一样,MySQL使用数据库(也称为模式)和表。然而,MySQL有一个独特的模块化架构,可以让您为工作选择最佳的底层存储引擎。MySQL通过几十个指标揭示了它在所有这些级别中的内部工作方式。

MySQL也非常灵活。您可以将其作为单个实例运行,作为主辅助群集,感谢复制,或者多主机模式.第三方解决方案如亚博直播平台虚角允许您创建水平扩展的集群。

密钥MySQL指标监控

让我们从回顾在任何MySQL实例中要监视的一些最重要的指标开始。要查看所有可用的指标,请查看我们的MySQL集成文档(我们将在下面进行设置)。

正常运行时间

它可能听起来不言而喻,但许多团队在忘记监视MySQL进程本身时为服务器停机时间设置警报。数据库已关闭后,您要立即通知。

连接

MySQL对同时连接的数量设置了硬性限制。当你到达它,新的连接被封锁了直到有人断开。

MySQL允许151个连接默认情况下。改变这个限制很简单:

设置全球max_connections = 200;

请记住,每个连接至少需要3MB,所以总是尽量保持连接的数量越少越好。

要确定要设置的最佳连接数,请监控三个指标:

  • net.maxusedConnections.:数据库启动后记录的最大连接数。使用此值作为设置的引用max_connections
  • net.threadsConnected:当前活动连接数。
  • net.connectionErrorsMaxConnectionsPerSecond:由于该连接的连接数量失败max_connections达到极限。如果值大于零,您需要提高限制,设置连接池对于您的应用程序,或者考虑安装一个负载均衡器ProxySQL

网络问题和错误客户端也会影响MySQL连接。手表net.abortedClientsPerSecond检测未正确关闭连接的应用程序。高速率通常表示网络中的问题。

内存使用情况

数据库需要大量内存才能正常工作,所以监控内存对于保持MySQL处于最佳状态至关重要。

一是设置监控服务器以确保它有足够的内存:

  • memoryFreeByes
  • 记忆使用
  • memorytotalbyes.

然后,在MySQL侧,监控这些指标:

  • db.innodb.bufferPoolPagesTotal:存储数据的页面数量。您希望此号码尽可能高,以降低磁盘活动并提高性能。
  • db.innodb.bufferPoolReadsPerSecond:未从磁盘检索的内存中未找到的页数。如果该值超过5-15%db.innodb.bufferPoolPagesTotal,数据库需要更多内存。在这种情况下,检查服务器RAM并增加db.innodb_buffer_pool_size在mysql上设置。
  • db.innodb.logWaitsPerSecond:如果这个值始终如一,这意味着日志缓冲区设置得太低了。在这种情况下,增加innodb_log_buffer_size.直到问题消失。

存储速度

内存后,磁盘I / O速度是数据库性能最关键的因素。即使系统有足够的RAM分配完整的数据库,它仍然需要磁盘I / O以确保交易一致性。

主要数据库工作负载塑造磁盘活动。对于在线事务处理(OLTP)系统(例如,用于在线购买处理的系统),以下度量标准应该是平滑且稳定的。峰值表示您的用户可能的瓶颈和延迟。另一方面,对于在线分析处理(OLAP)系统(例如,用于预算和预测的系统),不均匀的活动是更常见的并且应预期。

要关注工作量,请监控以下内容:

  • db.innodb.datareadspersecond.:每秒读取次数。
  • db.innodb.datawritespersecond.:每秒写次数。
  • db.innodb.osLogWrittenBytesPerSecond:事务日志吞吐量。这个值与数据随时间变化的程度成正比。

查询速度

观察这些指标来监控查询速度,并为您的数据库捕获基线:

  • query.questionspersecond.:客户端发送的查询数量。
  • query.queriespersecond.:每秒查询总数(QPS),包括管理命令和存储过程。它测量数据库的原始容量。
  • query.maxExecutionTimeExceededPerSecond:每秒超时的SELECT语句数。对于OLTP工作负载,您永远不希望这个值超过零。如果您发现您的查询超时了,请优化它们。

查询优化指标

查询优化是您对MySQL性能产生最大影响的位置。

要识别长时间运行的查询,请激活MySQL慢查询日志

设置全球slow_query_log = 1;全球的slow_query_log_file = ' / var / log / mysql / mysql-slow.log”;

然后设置一个合理的查询时间,在第一次通过时捕获行为最差的查询:

// 3秒阈值全球的long_query_time = 3;

随着性能的提高,您可以减少查询时间并重复此过程。

一旦功能处于活动状态,显示器query.slowqueriespersecond.,分析日志,并使用解释语句查找哪些查询性能更差。根据具体情况,您可能需要重写它们、添加或修改索引或重新构造表。

下面是在优化查询时要监视的一些附加指标。

临时文件和表

MySQL在磁盘上创建临时文件和表以进行操作,例如通过...分组订购,或联盟它不适合内存。因为这些会导致过多的磁盘I/O,所以请密切关注以下指标:

  • db.createdtmpdisktableSerecond.措施表。
  • db.createdTmpFilesPerSecond措施临时文件。

虽然不可能总是将这些值减少到零,但您可以通过调整来最小化临时磁盘活动sort_buffer_sizejoin_buffer_size,并重写查询。

MySQL使用表级和行级锁来确保数据一致性。编写不好的查询和一些管理任务可能导致长时间的锁,从而阻塞其他客户机。锁活动的主要指标是db.tablesLocksWaitedPerSecond表,db.innodb.rowLockTimeAvgdb.innodb.rowlowlockwaitspersecond.行。

缺少索引

MySQL使用索引来过滤、排序和连接表。当查询和表结构没有对齐时,MySQL被迫扫描整个表。这种情况会占用大量额外内存,并导致沉重的磁盘I/O。

监控这些指标以获得详细信息:

  • db.selectfulljoinpersecond.db.selectFullJoinRangePerSecond指示表是否需要附加索引。
  • db.innodb.bufferPoolReadAheadRndPerSecond有助于检测低效的表级读取。

使用New Relic监控MySQL

我们的mysql集成使用新遗迹基础设施代理人收集和发送性能指标从您的MySQL数据库到我们的平台。您可以查看数据库服务器的运行状况并分析度量数据,以便轻松找到任何问题的根源

该集成兼容MySQL 5.6或更高版本。

在以下示例中,我们将向您展示如何为运行MySQL的Ubuntu服务器设置基础结构监视。如果您有不同的主机操作系统,请检查代理文档对替代指令。

注意:您还可以将MySQL监视为运行的服务KubernetesECS.

在Ubuntu Server上安装代理和集成

  1. 新的遗物一体,导航到您的帐户下拉菜单(在右上角),并选择添加更多数据
  2. 选择您的操作系统(本例中为Ubuntu),并根据提示获取许可证密钥并选择您的Ubuntu版本。
  3. 要部署基础架构代理和MySQL集成,请在服务器上运行以下命令:
    • 导入基础设施代理GPG密钥。
      curl - s https://download.newrelic.com/infrastructure_agent/gpg/newrelic-infra.gpg|Sudo apt-key添加
    • 添加New Relic存储库(查看所有发行版在这里)。
      printf“deb [arch = amd64] https://download.newrelic.com/infrastructure_agent/linux/apt仿生主要”|sudo tee-a /etc/apt/sources.list.d/newrelic-infra.list
    • 安装基础架构代理(newrelic-infra)和mysql集成(nri-mysql.)。
      sudo apt-get更新&&sudo apt-get安装-y newrelic-infra nri-mysql

配置MySQL集成

  1. 在MySQL中添加监控用户。
    mysql -e "CREATE USER 'newrelic'@'localhost' IDENTIFIED BY 'MONITOR_USER_PASSWORD';"*“newrelic”@“localhost”;“
  2. 配置MySQL集成。
    cd /etc/newrelic-infra /集成。D sudo cp mysql-config.yml。mysql-config示例。mysql-config.yml
  3. 填写password.hostname:
    主机名:本地主机端口3306用户名newrelic密码MONITOR_USER_PASSWORD
  4. remote_monitoring真正的
  5. 捕获extended_metricsextended_innodb_metrics.
    extended_metrics1 extended_innodb_metrics1
  6. 如果你有MyISAM表,也设置extended_myisam_metrics
    Extended_myisam_metrics:1
  7. 重新启动基础架构代理以完成设置。systemctl重启newrelic-infra

我们的完整配置选项列表MySQL集成文档

在New Relic中查看MySQL数据

从New Relic 1,导航到基础设施查看关于服务器的传入数据。

要开始监视MySQL数据库,请导航到基础设施>第三方服务> MySQL Dashboard

下面是一些基于集成配置创建的示例图表:

  • QPS图度量数据库的原始效率

  • Slow Queries图表让您知道何时优化数据库

  • 使用最大连接图进行微调max_connections

  • 使用网络和磁盘的I / O活动在系统中查找瓶颈

要创建更多高级图表和自定义仪表板,请退房数据浏览器

从积分到可观测性

如果数据是应用程序的生命线,那么数据库就是它的心脏。可靠的数据库性能在任何业务中都是至关重要的。通过监视一些关键指标,您可以更好地理解MySQL服务器的运行情况。

MySQL集成是开源软件。这意味着你可以浏览其源代码发送改进,或者创建自己的fork并构建它。

让我们的MySQL集成成为你的可观察性堆栈的重要组成部分。

看看我们完整列表On-Host集成更多信息。

如果你准备好控制你的数据库,报名为100GB的摄取每月和一个全堆栈可观用户许可证永远免费!