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_size
和join_buffer_size
,并重写查询。
锁
MySQL使用表级和行级锁来确保数据一致性。编写不好的查询和一些管理任务可能导致长时间的锁,从而阻塞其他客户机。锁活动的主要指标是db.tablesLocksWaitedPerSecond
表,db.innodb.rowLockTimeAvg
和db.innodb.rowlowlockwaitspersecond.
行。
缺少索引
MySQL使用索引来过滤、排序和连接表。当查询和表结构没有对齐时,MySQL被迫扫描整个表。这种情况会占用大量额外内存,并导致沉重的磁盘I/O。
监控这些指标以获得详细信息:
db.selectfulljoinpersecond.
和db.selectFullJoinRangePerSecond
指示表是否需要附加索引。db.innodb.bufferPoolReadAheadRndPerSecond
有助于检测低效的表级读取。
使用New Relic监控MySQL
我们的mysql集成使用新遗迹基础设施代理人收集和发送性能指标从您的MySQL数据库到我们的平台。您可以查看数据库服务器的运行状况并分析度量数据,以便轻松找到任何问题的根源
该集成兼容MySQL 5.6或更高版本。
在以下示例中,我们将向您展示如何为运行MySQL的Ubuntu服务器设置基础结构监视。如果您有不同的主机操作系统,请检查代理文档对替代指令。
注意:您还可以将MySQL监视为运行的服务Kubernetes或ECS..
在Ubuntu Server上安装代理和集成
- 从新的遗物一体,导航到您的帐户下拉菜单(在右上角),并选择添加更多数据.
- 选择您的操作系统(本例中为Ubuntu),并根据提示获取许可证密钥并选择您的Ubuntu版本。
- 要部署基础架构代理和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
- 导入基础设施代理GPG密钥。
配置MySQL集成
- 在MySQL中添加监控用户。
mysql -e "CREATE USER 'newrelic'@'localhost' IDENTIFIED BY 'MONITOR_USER_PASSWORD';"*“newrelic”@“localhost”;“
- 配置MySQL集成。
cd /etc/newrelic-infra /集成。D sudo cp mysql-config.yml。mysql-config示例。mysql-config.yml
- 填写password.hostname:
主机名:本地主机端口:3306用户名:newrelic密码:MONITOR_USER_PASSWORD
- 集
remote_monitoring
来真正的
. - 捕获
extended_metrics
和extended_innodb_metrics.
.extended_metrics:1 extended_innodb_metrics:1
- 如果你有MyISAM表,也设置
extended_myisam_metrics
:Extended_myisam_metrics:1
- 重新启动基础架构代理以完成设置。systemctl重启newrelic-infra
我们的完整配置选项列表MySQL集成文档.
在New Relic中查看MySQL数据
从New Relic 1,导航到基础设施查看关于服务器的传入数据。
要开始监视MySQL数据库,请导航到基础设施>第三方服务> MySQL Dashboard.
下面是一些基于集成配置创建的示例图表:
要创建更多高级图表和自定义仪表板,请退房数据浏览器.
从积分到可观测性
如果数据是应用程序的生命线,那么数据库就是它的心脏。可靠的数据库性能在任何业务中都是至关重要的。通过监视一些关键指标,您可以更好地理解MySQL服务器的运行情况。
MySQL集成是开源软件。这意味着你可以浏览其源代码和发送改进,或者创建自己的fork并构建它。
让我们的MySQL集成成为你的可观察性堆栈的重要组成部分。
看看我们完整列表On-Host集成更多信息。
如果你准备好控制你的数据库,报名为100GB的摄取每月和一个全堆栈可观用户许可证永远免费!