当前位置: 首页 > 科技观察

MySQL数据库性能优化的关键参数

时间:2023-03-11 20:12:40 科技观察

我们在数据库管理和开发中经常会遇到性能问题,这就涉及到MySQL性能优化。通过网上查找资料和笔者自己的尝试,我觉得以下几个系统参数比较关键:关键参数1:back_log需要MySQL能够拥有的连接数。当主MySQL线程在短时间内收到大量连接请求时,这会起作用,然后主线程需要一些时间(尽管很短)来检查连接并启动一个新线程。back_log值表示在MySQL暂时停止响应新请求之前,有多少请求可以存储在堆栈中一小段时间。只有当你期望在短时间内有很多连接时,你才需要增加它,换句话说,这个值是传入TCP/IP连接的侦听队列的大小。您的操作系统对此队列大小有自己的限制。尝试将back_log设置为高于您的操作系统限制将无效。当您观察您的主机进程列表并发现大量264084|未经身份验证的用户|xxx.xxx.xxx.xxx|空|连接|空|登入|NULL挂起的连接进程,你应该增加back_log的值。默认值是50,我改成了500。关键参数二:interactive_timeout服务器在关闭交互式连接之前等待操作的秒数。交互式客户端定义为使用mysql_real_connect()的CLIENT_INTERACTIVE选项的客户端。默认值是28800,我改成7200。关键参数三:key_buffer_size索引块缓冲,所有线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它以更好地处理索引(对于所有读取和多次写入),尽可能多。如果它太大,系统将开始分页并真正变慢。默认值为8388600(8M),我的MySQL主机有2GB内存,所以我改成了402649088(400MB)。关键参数四:max_connections允许的并发客户端数。增加这个值会增加mysqld需要的文件描述符的数量。这个数字应该增加,否则,你会经常看到太多连接错误。默认值是100,我改成了1024。关键参数五:record_buffer每个执行顺序扫描的线程都会为它扫描的每个表分配一个这个大小的缓冲区。如果进行大量顺序扫描,您可能需要增加此值。默认值是131072(128K),我改成了16773120(16M)关键参数六:sort_buffer每个需要排序的线程分配一个这个大小的缓冲区。增加此值可加快ORDERBY或GROUPBY操作。默认值是2097144(2M),我改成了16777208(16M)。关键参数七:table_cache为所有线程打开的表数。增加这个值会增加mysqld需要的文件描述符的数量。MySQL要求每个打开的表有2个文件描述符。默认值是64,我改成512。关键参数八:thread_cache_size可以复用里面存放的线程数。如果有,则从缓存中取出新的线程,当连接断开时,如果有空间,则将客户端的线程放入缓存中。如果有很多新线程,可以更改此变量值以提高性能。您可以通过比较Connections和Threads_created状态变量来查看此变量的效果。我设置为80。关键参数九:wait_timeout服务器在关闭连接之前等待连接动作的秒数。默认值为28800,我改成7200。注:参数调整可以通过修改/etc/my.cnf文件,重启MySQL来实现。这是一个比较谨慎的工作,以上结果只是我的一些看法。可以根据自己主机的硬件情况(尤其是内存大小)进一步修改。【编者推荐】MySQL隐藏空间问题解析MySQL数据库要死了?依托Oracle救援或自救MySQL图形化管理工具phpMyAdmin3.1.3发布MySQL中datetime和timestamp对比浅谈MySQL常用维护管理工具