服务器性能如何优化(服务器优化是什么意思)

lxf2023-12-31 19:50:01

前面几段介绍了普通MySQL用户的表创建和索引操作,以及使用查询编写可以进行的优化。但是,有些优化只能由MySQL管理员和系统管理员完成,他们对MySQL服务器或运行MySQL的机器拥有控制权。一些服务器参数直接适用于查询处理,

前面几段已经介绍了普通MySQL用户的表创建和索引操作,以及编译查询可以进行的优化。但是,有些优化只能由MySQL管理员和系统管理员完成,他们对MySQL服务器或运行MySQL的机器拥有控制权。有些服务器参数直接适用于查询处理,所以可以打开它们。但是有些硬件配置问题直接影响查询处理速度,所以要调整。

磁盘问题

如前所述,磁盘寻道是一个很大的性能瓶颈。当数据开始增长以至于缓存变得不可能时,这个问题变得越来越明显。对于大型数据库,您或多或少地随机访问数据,您可以相信您至少需要一次磁盘寻道读取和几次磁盘寻道写入。为了最大限度地减少这个问题,请使用寻道时间短的磁盘。

为了增加可用磁盘轴的数量(从而减少寻道开销),可以象征性地将文件加入不同的磁盘或分割磁盘。 1。使用符号链接
这意味着将普通数据目录中的索引/数据文件符号链接到其他磁盘(也可以进行分区)。这使得寻道和读取时间更短(如果磁盘不用于其他用途的话)

2.分区 分区是指你有很多磁盘,把第一个块放在第一个磁盘上,第二个块放在第二个磁盘上,第n个块放在(n mod number_of_disks)磁盘上,以此类推。这意味着,如果您的正常数据大小大于分区大小(或完美排列),您将获得更好的性能。注意分区是否非常依赖于操作系统和分区大小。因此,用不同的分区大小测试您的应用程序。参见10.8使用您自己的基准。注意分区的速度差异取决于参数,取决于你如何分区参数和磁盘数量,可以得到一个数量级的差异。请注意,您必须选择针对随机或顺序访问进行优化。 为了可靠性,你可能想用攻击RAID 0+1(分区+镜像),但这种情况下,你将需要2*N个驱动器来保存N个驱动器的数据。如果你有钱,这可能是最好的选择!但是,您可能还需要购买一些卷管理软件来有效地处理它。

一个好的选择是将稍微重要的数据(可以重新生成)存储在RAID 0磁盘上,而将真正重要的数据(如主机信息和日志文件)存储在RAID 0+1或RAID N磁盘上。如果由于更新奇偶校验位而导致大量写入,RAID N可能会有问题。 您还可以为数据库使用的文件系统设置参数。一个简单的改变是用noatime选项挂载文件系统。这是它跳过inode中的更新的最后一次访问时间,这将避免一些磁盘寻道。

硬件问题
硬件可以用来更有效地提高服务器的性能:

1.在机器中安装更多内存。这可以增加服务器的缓存和缓冲区的大小,使服务器更频繁地使用存储在内存中的信息,并减少从磁盘获取信息的需求。

2.如果有足够的RAM来完成内存文件系统中的所有交换,您应该重新配置系统并删除所有磁盘交换设置。否则,即使有足够的RAM用于交换,一些系统仍然需要与磁盘交换。

3.添加更快的磁盘以减少I/O等待时间。这里寻道时间是决定性能的主要因素。逐字移动磁头很慢,一旦磁头定位,从磁道读取数据块会更快。

尝试在不同的物理设备上重新分配磁盘活动。如果可能,您应该将两个最繁忙的数据库存储在不同的物理设备上。注意,在同一个物理设备上使用不同的分区是不够的。这没有什么帮助,因为它们仍会争用相同的物理资源(磁头)。移动数据库的过程在第10章中介绍。

4.在将数据放回不同的设备之前,您应该确保了解系统的负载特征。如果在特定的物理设备上已经有一些特定的主要活动,那么将数据库放在那里实际上可能会使性能更差。例如,不要将数据库移动到处理大量Web通信的Web服务器设备上。

5.在设置MySQL时,您应该将其配置为使用静态库,而不是共享库。使用共享库的动态二进制可以节省磁盘空间空,但是静态二进制速度更快(但是如果要加载自定义函数,不能使用静态二进制,因为UDF机制依赖于动态连接)。

服务器参数的选择

服务器有几个参数(或变量),可以通过更改来影响其操作。系统变量的当前值可以通过执行mysqladmin varibles命令来检查,有几个参数主要与查询有关,这里有必要提一下:
delayed_queue_size。

此参数确定在客户端执行其他INSERT DELAYED语句块之前,从INSERT DELAYED语句放入队列的行数。增加该参数的值可以使服务器从该请求中接收更多的行,因此客户端可以继续执行而不会阻塞。

密钥缓冲区大小

此参数是用于存储索引块的缓冲区的大小。如果内存很大,增加这个值可以节省创建和修改索引的时间。更大的值使MySQL能够在内存中存储更多的索引块,这增加了在不读取磁盘块的情况下在内存中找到键值的可能性。

在MySQL版本3.23和更高版本中,如果您增加了密钥缓冲区的大小,您可能还希望使用- init-file选项启动服务器。这可以指定服务器启动时要执行的SQL语句文件。如果您有希望存储在内存中的只读表,可以通过非常快速的索引查找将它们复制到堆表中。

后退_日志

引入从当前客户端处理时排队的客户端连接请求的数量。如果你有一个繁忙的网站,你可以增加变化量的价值。

编译和链接如何影响MySQL的速度

下面的测试大部分都是在Linux和MySQL benchmark上进行的,但是应该对其他操作系统和工作负载有一定的指导作用。

当您使用-static链接时,您可以获得最快的可执行文件。使用Unix套接字而不是TCP/IP来连接数据库也可以获得更好的性能。

在Linux上,用pgcc和-O6编译时,会得到最快的代码。用这些选项编译“sql_yacc.cc”需要200M左右的内存,因为gcc/pgcc需要大量内存来内联所有函数。在配置MySQL时,还应该设置CXX=gcc,避免包含libstdc++库(没必要)。

只有使用更好的编译器或者更好的编译器选项,才能在应用中获得10-30%的加速。如果您自己编译SQL server,这一点尤其重要!

例如,在Intel上,您应该使用pgcc或Cygnus CodeFusion编译器来获得最高速度。我们已经测试了新的富士通编译器,但它不足以优化MySQL编译而不出错。

下面是我们做过的一些测量表: 如果你用pgcc搭配-O6,编译任何东西,mysqld服务器都比用gcc(搭配string 99的版本)快11%。

如果动态链接(非静态),结果会慢13%。请注意,您仍然可以使用动态链接的MySQL库。只有服务器对性能至关重要。

如果使用TCP/IP而不是Unix套接字,结果会慢7.5%。

在Sun SPARCstation 10上,Gcc2.7.3比Sun Pro C++ 4.2快13%。

在Solaris 2.5.1上,MIT-pthreads比在单个处理器上使用本机线程的Solaris慢8-12%。随着负载/CPU越来越多,差异应该会越来越大。
TcX提供的MySQL-Linux发行版,用pgcc编译,静态链接。

摘要

本节简要介绍如何在服务器级别优化数据库的性能,以及提高数据库性能所涉及的硬件问题。尽可能快地选择系统并使用RAID是一个非常容易想到的方法

对于数据库守护进程,可以在编译时提供适当的参数,或者在选项文件中提供需要优化的参数。

思考问题 1。使用ANALYSE process分析语句SELECT * FROM pet确定是否有必要更改色谱柱类型。 2。现在你需要优化表宠物。你能用什么方法做这件事?


adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!