监视和配置数据库服务器
公司将本地数据库迁移到 Azure Database for MySQL/PostgreSQL 后,仍需要一种方法来监视其性能。
作为数据库开发人员,你已习惯于使用特定于数据库的工具和本地 VM 监视。 在 Azure 上运行数据库后,可以利用门户使用单个工具来监视所有不同的数据库。
在本单元中,你将了解 Azure Monitor 如何支持监视你负责的数据库的运行状况。 发现问题后,你将了解如何更改数据库的配置以解决该问题。
如何使用 Azure Monitor 查看数据库的运行状况
使用 Azure Monitor 跟踪 Azure Database for MySQL/PostgreSQL 中的资源使用情况。 使用 Azure 门户中服务器的 指标 页,可以创建有助于检测性能趋势和发现异常的图表。
Azure Database for MySQL/PostgreSQL 的指标
可用于监视服务器的指标分为四大类:
- 存储度量值
- 连接指标
- 数据处理资源利用率指标
- 复制指标
存储度量值
存储指标跟踪服务器中数据库的总大小(使用的存储),以及服务器上的当前存储空间量(存储限制)。 在活动系统中,可能会发现使用 存储 指标随时间推移而增长。 如果选择了服务器的自动增长选项,存储限制 指标偶尔会随着可用空间量减少而增加。 每当可用空间量低于当前使用量的 5% 时,将添加额外的存储。 使用 存储百分比 指标查看在服务器上释放空间的已用空间的比例。
如果服务器经常花费时间增加存储,请考虑手动分配更多空间。 在 Azure 门户中为此,方法是为服务器选择 定价层 页,并使用 存储 滑块。 请记住,你对存储收费,因此不要将可用存储设置为高。
备份存储使用的 指标显示备份占用的空间。 从成本角度来看,此指标非常重要。 备份存储不收取费用,前提是备份存储的大小仍低于分配给服务器的存储空间大小(由定价层指定)。 超出此限制时,备份存储会产生费用。
连接指标
活动连接 指标显示服务器当前支持的并发连接数。 这可能与并发用户数不同,具体取决于是否已配置任何类型的连接池。 Azure Database for MySQL/PostgreSQL 目前不提供任何连接池功能,但可以使用代理服务(如 PgBouncer* (for PostgreSQL)来实现此功能。 有关详细信息,请参阅 使用 Azure Database for PostgreSQL – 连接池 的性能最佳做法
失败的连接 指标显示用户显示无效凭据的频率。 在短时间内,大量此类事件可能表示暴力攻击。
数据处理资源利用率指标
这些指标可帮助你监视服务器如何处理工作负荷。
CPU 百分比 指标显示 CPU 的繁忙程度。 CPU 使用率过高不是问题,除非它随时间推移而增加。 超过 90% 且仍在上升的 CPU 使用率表明系统正在接近处理容量。 应考虑纵向扩展到具有更多资源的定价层。
内存百分比 指标指示内存占用率。 Azure Database for MySQL/PostgreSQL 使用内存来缓存数据,以及运行每个客户端请求启动的进程。 在内存使用率过高之前,内存使用率不是问题,这通常超过 95%,具体取决于可用的实际内存量。 内存可用性非常低可能会导致连接失败,并且由于内存碎片而性能缓慢。 应监视此指标,以确定内存占用是否随时间而增长,并相应地缩放服务器。
IO 百分比 指标跟踪服务器正在执行的磁盘活动量。 理想情况下,此值应尽可能低。 磁盘 IO 是一个缓慢的作。 此指标的高值,加上 内存百分比的高值,可能表示服务器没有足够的资源有效缓存数据,而是不得不读取和写入磁盘存储的数据。 一定程度的 IO 活动是不可避免的,因为数据必须在某个时候保存到磁盘,并且必须维护事务日志。 在大多数数据库服务器中,写入作由异步运行的单独进程或线程执行。
网络中 和 网络传出 指标显示跨活动连接进入和退出服务器的流量。 这些数字的限制取决于客户端应用程序和服务器之间的路径带宽。
复制指标
Azure Database for PostgreSQL 提供跨副本 最大滞后时间,以及 副本滞后 指标,以帮助确定任何副本的最新信息。 仅当已配置只读副本时,这些指标才有意义。
副本的最大滞后时间 指标显示主副本后面最慢的副本的字节数。 只能从主节点监视此指标。
副本滞后 指标显示从主服务器接收并应用于副本的最新事务的时间(以秒为单位)。 仅当在副本上查看时,此指标才有意义。
Azure Database for MySQL 具有 复制延迟(以秒为单位) 指标。 此指标只能从副本进行监视,它显示副本落后于主控形状的秒数。
创建图表和警报以监视性能
使用 Azure 门户中服务器的 指标 页,可以创建跟踪指标值的图表。 指标按一分钟间隔收集。 对于每个指标,请指定一个聚合,用于确定如何报告该指标。
- 平均值 为每分钟生成指标的平均值
- Max 显示每分钟实现的最大值
- Min 显示最小值
- 总和 指标总计
- 计数 显示生成指标的事件的次数
并非所有聚合都对于每个指标都有意义。
以下示例图表捕获了 CPU 百分比、内存百分比、IO 百分比和活动连接指标的平均分钟/分钟值。 你将看到有 101 个活动连接同时运行。 CPU 和内存利用率都稳定,IO 百分比为 0。 在此示例中,客户端应用程序执行读取密集型工作负荷,并将必要的数据缓存在内存中。
请注意,捕获的指标与图表上显示的结果之间存在最多 5 分钟的滞后时间。
如果指标指示资源到达关键点,可以设置警报以通知管理员。 以下示例向管理员发送电子邮件(如果内存利用率超过 90%)。
,则会发送电子邮件
配置服务器参数
本机 MySQL 和 PostgreSQL 服务器高度可配置,因为两者都使用存储在参数文件中的配置设置。 对于 PostgreSQL,此信息保存在 postgresql.conf 文件中。 对于 MySQL,配置数据存储在 my.cnf 文件中的各种。 在 Azure Database for MySQL/PostgreSQL 中,你无权直接访问这些文件。 而是使用 Azure 门户或 Azure CLI 查看和修改服务器参数。
使用 Azure 门户查看和设置参数
服务器配置参数在 Azure 门户中服务器的 服务器参数 页上可用。 可以根据服务器修改参数值。 下图显示了 Azure Database for PostgreSQL 的服务器参数页。 Azure Database for MySQL 的相应页面类似。
Azure Database for PostgreSQL图像
并非所有服务器配置参数都可用,因为大部分服务器配置都由 Azure 控制。 例如,缺少与内存分配关联的参数。 此外,Azure Database for MySQL 不支持 ISAM 存储,因此 myisam 参数不存在。
对标记为 动态 的参数的更改会立即生效。 标记为 静态 的参数需要重启服务器。 可以在服务器的 概述 页上执行此作。
突出显示“重启”按钮
使用 Azure CLI 查看和设置参数
可以使用 az mysql/postgres server configuration
命令以编程方式查看和修改参数。 使用 az mysql/postgres server configuration list
查看每个配置参数的设置,并使用 az mysql/postgres server configuration show [parameter-name]
在单个参数上主页。 下面的代码片段显示了 Azure Database for PostgreSQL 的示例:
az postgres server configuration show \
--resource-group northwindrg \
--server-name northwind101 \
--name vacuum_defer_cleanup_age
结果应如下所示:
{
"allowedValues": "0-1000000",
"dataType": "Integer",
"defaultValue": "0",
"description": "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any.",
"id": "**********************",
"name": "vacuum_defer_cleanup_age",
"resourceGroup": "northwindrg",
"source": "system-default",
"type": "Microsoft.DBforPostgreSQL/servers/configurations",
"value": "0"
}
输出中的重要项是 值 字段,其中显示了参数的当前设置。
使用 az mysql/postgres server configuration set
命令更改配置参数的值,如下所示:
az postgres server configuration set \
--resource-group northwindrg \
--server-name northwind101 \
--name vacuum_defer_cleanup_age \
--value 5
如果需要在更改静态参数后重启服务器,请运行 az mysql/postgres server restart
命令:
az postgres server restart \
--resource-group northwindrg \
--name northwind101