监视和配置数据库服务器
公司将其本地数据库迁移到 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(适用于 PostgreSQL)等代理服务来实现此功能。 有关详细信息,请参阅使用 Azure Database for PostgreSQL 的性能最佳做法 - 连接池
“失败连接”指标显示用户提供无效凭据的频率。 较短的时间段内出现大量这类事件可能表示存在暴力攻击。
数据处理资源利用率指标
这些指标有助于监视服务器处理工作负载的方式。
“CPU 百分比”指标显示 CPU 的繁忙程度。 高 CPU 使用率不是问题,除非它随着时间推移不断增长。 CPU 利用率超过 90% 且仍在增加表明系统正在接近处理容量。 应考虑纵向扩展到具有更多资源的定价层。
“内存百分比”指标指示内存占用情况。 Azure Database for MySQL/PostgreSQL 使用内存来缓存数据,并用于运行每个客户端请求启动的进程。 高内存使用率不是问题,除非它变得非常大(通常超过 95%),具体取决于实际可用内存量。 内存可用性过低可能导致内存碎片引发的连接失败和性能下降。 应监视此指标以确定内存占用是否随着时间推移而不断增长,并相应地扩展服务器。
“IO 百分比”指标跟踪服务器正在执行的磁盘活动量。 理想情况下,此值应尽可能低。 磁盘 IO 是慢操作。 此指标值较高加之“内存百分比”值较高可能表示服务器没有足够的资源来有效缓存数据,改而必须在磁盘存储中读取和写入数据。 一定程度的 IO 活动是不可避免的,因为必须在某个时间点将数据保留在磁盘,并且必须维护事务日志。 在大多数数据库服务器中,这种写入操作由单独的进程或异步运行的线程来执行。
“网络流入量”和“网络流出量”指标显示活动连接之间进入和离开服务器的流量。 这些数字的限制取决于客户端应用程序和服务器之间的路径带宽。
复制指标
Azure Database for PostgreSQL 提供“跨副本最大延迟”和“副本滞后时间”指标,帮助你确定任何副本的最新程度。 仅当配置了只读副本时,这些指标才有意义。
“跨副本最大延迟”指标显示最慢副本在主服务器后面的字节数。 只能从主服务器监视此指标。
“副本滞后时间”指标显示从主服务器接收最新事务并将其应用于副本以来的时间(以秒为单位)。 此指标仅在副本上进行查看时才有意义。
Azure Database for MySQL 具有“复制滞后时间(秒)”指标。 只能从副本监视此指标,它显示副本滞后于主服务器的秒数。
创建图表和警报来监视性能
Azure 门户中服务器的“指标”页使你可以创建跟踪指标值的图表。 每分钟收集一次指标。 对于每个指标,指定一个确定如何报告该指标的聚合。
- “平均值”生成该指标每分钟的平均值
- “最大值”显示每分钟内实现的最大值
- “最小值”显示最小值
- “总计”加总该指标
- “计数”显示生成该指标的事件发生的次数
并非所有聚合都对每个指标都有意义。
下面的示例图表捕获“CPU 百分比”、“内存百分比”、“IO 百分比”和“活动连接”指标每分钟的平均值。 将看到 101 个活动连接全都并发运行。 CPU 和内存利用率均稳定,IO 百分比为 0。 此示例中,客户端应用程序执行读取密集型工作负荷,必要的数据缓存在内存中。
请注意,捕获的指标值和图表上显示的结果之间有最多五分钟的滞后时间。
如果指标表明资源快到达关键点,可以设置警报来通知管理员。 如果内存利用率超过 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 控制。 例如,与内存分配相关的参数就缺失。 此外,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