数据库后端会影响应用程序,然后会影响组织性能。发生这种情况时,负责人倾向于快速解决问题。有许多不同的方法可以提高MySQL的性能。对于许多组织来说,这是一个非常受欢迎的选择,找到具有默认配置的MySQL安装是很常见的。但是,这可能不适合您的工作负载和设置需求。
在此文中,我们将帮助您更好地了解数据库工作负载以及可能对其造成伤害的事情。对于如何管理数据库,任何人都必不可少的知识,尤其是在MySQL DB上运行生产系统时。
为了确保数据库按预期运行,我们将从免费的MySQL监视工具开始。然后,我们将研究您可以调整以改善数据库实例的相关MySQL参数。我们还将看一下索引作为数据库性能管理中的一个因素。
为了实现硬件资源的最佳利用,我们将研究内核优化和其他关键操作系统设置。最后,我们将研究基于MySQL复制的流行设置以及如何从性能滞后方面对其进行检查。
识别MySQL性能问题
此分析可帮助您更好地了解数据库的运行状况和性能。下面列出的工具可以帮助捕获和理解每笔交易,让您掌握其性能和资源消耗的最新信息。
PMM(Percona监视和管理)
Percona监视和管理工具是专用于MySQL,MongoDB和MariaDB数据库(本地或云中)的开源工具集合。PPM是免费使用的,它基于著名的Grafana和Prometheus时间序列数据库。它为MySQL提供了基于时间的详尽分析。它提供了预配置的仪表板,可帮助您了解数据库工作负载。
PMM使用客户端/服务器模型。您必须下载并安装客户端和服务器。对于服务器,可以使用Docker容器。就像拉出PMM服务器docker映像,创建容器并启动PMM一样简单。
拉PMM服务器映像
docker pull percona/pmm-server:2 2: Pulling from percona/pmm-server ab5ef0e58194: Downloading 2.141MB/75.78MB cbbdeab9a179: Downloading 2.668MB/400.5MB
复制
创建PMM容器
docker create \ -v /srv \ --name pmm-data \ percona/pmm-server:2 /bin/true
复制
运行容器
docker run -d \ -p 80:80 \ -p 443:443 \ --volumes-from pmm-data \ --name pmm-server \ --restart always \ percona/pmm-server:2
复制
作为PMM工具集一部分的另一个工具是查询分析(QAN)。QAN工具始终位于查询的执行时间之上。您甚至可以获取SQL查询的详细信息。它还提供了不同参数的历史视图,这些参数对于MySQL数据库服务器的最佳性能至关重要。这通常有助于了解代码中的任何更改是否会损害您的性能。例如,在您不知情的情况下引入了新代码。一种简单的用法是显示当前的SQL查询并突出显示问题,以帮助您提高数据库的性能。
PMM提供MySQL数据库性能的时间点和历史可见性。可以定制仪表板以满足您的特定要求。您甚至可以展开特定的面板以查找有关过去事件的所需信息。
使用ClusterControl免费监视数据库
ClusterControl提供对整个数据库基础结构的实时监视。它支持开始各种数据库系统的MySQL, MariaDB的,PerconaDB, MySQL的NDB簇,加莱拉集群(两者的Percona和MariaDB的), MongoDB的, PostgreSQL的和 TimescaleDB。监视和部署模块可免费使用。
ClusterControl由几个模块组成。在免费的ClusterControl社区版中,我们可以使用:
性能顾问会针对如何解决数据库和服务器问题提供具体建议,例如性能,安全性,日志管理,配置和容量规划。运营报告可用于确保数百个实例的合规性。但是,监视不是管理。ClusterControl具有备份管理,自动恢复/故障转移,部署/扩展,滚动升级,安全性/加密,负载平衡器管理等功能。
监控与顾问
该ClusterControl社区版提供免费的数据库监控提供所有跨数据中心的部署的统一视图,让您深入到各个节点。与PMM相似,我们可以基于实时数据找到仪表板。要知道现在正在发生什么,它具有用于提高准确性的高分辨率度量标准,预配置的仪表板以及用于警报的各种第三方通知服务。
可以从一个点对本地和云系统进行监视和管理。智能健康检查针对分布式拓扑实现,例如,通过利用负载均衡器的数据库节点视图来检测网络分区。
监视组件之一中的 ClusterControl Workload Analytics,可以轻松地帮助您跟踪数据库活动。它使应用程序的事务/查询更加清晰。绝不会出现性能异常,但是它们确实会发生,并且很容易在大量数据中丢失。异常发现将使所有突然开始执行的查询比平时慢得多。它跟踪查询执行时间的移动平均值和标准偏差,并在值之间的差异超过平均值两个标准偏差时检测/发出警报。
从下图可以看出,我们能够捕获到一些查询,这些查询在一天之间往往会更改特定时间的执行时间。
要安装ClusterControl,请单击此处并下载安装脚本。安装脚本将执行必要的安装步骤。
您还可以使用ClusterControl获得docker映像。
$ docker pull severalnines/clustercontrol
复制
MySQL数据库索引
如果没有索引,则运行相同的查询将导致每行扫描所需的数据。在表中的字段上创建索引会创建额外的数据结构,该数据结构是字段值,并指向与其相关的记录的指针。换句话说,索引产生了一种捷径,在扩展表上的查询时间要快得多。没有索引,MySQL必须从第一行开始,然后通读整个表以找到相关的行。
一般而言,索引在通常执行的查询中作为WHERE子句主题的列上效果最佳。
表可以具有多个索引。管理索引将不可避免地需要能够在表上列出现有索引。查看索引的语法如下。
要检查MySQL表上的索引,请运行:
SHOW INDEX FROM table_name;
复制
由于索引仅用于加速记录中匹配字段的搜索,因此可以推断出仅用于输出的索引字段将浪费磁盘空间。另一个副作用是索引可以扩展插入或删除操作,因此应避免在不需要时使用索引。
MySQL数据库Swappiness
在运行MySQL唯一服务的服务器上,最好将vm.swapiness设置为1。默认设置为60,不适用于数据库系统。
vi /etc/sysctl.conf vm.swappiness = 1
复制
透明的大页面
如果您在RedHat上运行MySQL,请确保已禁用“透明大页面”。
可以通过以下命令检查:
cat /proc/sys/vm/nr_hugepages 0
复制
(0表示禁用了透明的大页面。)
MySQL I / O调度程序
在大多数发行版中,默认情况下应启用noop或截止日期I / O调度程序。要检查它是否运行
cat /sys/block/sdb/queue/scheduler
复制
MySQL文件系统选项
建议使用日志文件系统,例如xfs,ext4或btrfs。MySQL可以很好地解决所有这些问题,而且最大可能的区别在于支持的最大文件大小。
- XFS(最大文件系统大小为8EB,最大文件大小为8EB)
- XT4(最大文件系统大小为8EB,最大文件大小为16TB)
- BTRFS(最大文件系统大小为16EB,最大文件大小为16EB)
默认文件系统设置应适用。
NTP守护进程
在数据库服务器上安装NTP时间服务器守护程序是一个很好的最佳实践。使用以下系统命令之一。
#Red Hat yum install ntp #Debian sudo apt-get install ntp
复制