> 数据库 > MySQL >

mysql优化实践总结

编译Mysql时configure: error: No curses/termcap library found 的错误解决方法

在网上找了很多的解决办法,发现以下这个正解,放上以备查用

安装ncurses

cd /usr/local/src/mysql

cat Makefile | grep  CONF_COMMAND

编译安装MySQL

# tar xzvf mysql-5.0.27.tar.gz

# cd mysql-5.0.27

# ./configure \

“–prefix=/usr/local/mysql” \

“–localstatedir=/var/lib/mysql” \

“–with-comment=Source” \

“–with-server-suffix=-Comsenz” \

“–with-mysqld-user=mysql” \

“–without-debug” \

“–with-big-tables” \

“–with-charset=” \ #这个后边需要指定你所需要的字符集参数(gbk,utf8……)

“–with-collation= ” \ #字符集校正码(gbk_chinese_ci,……)

“–with-extra-charsets=all” \

“–with-pthread” \

“–enable-static” \

“–enable-thread-safe-client” \

“–with-client-ldflags=-all-static” \

“–with-mysqld-ldflags=-all-static” \

“–enable-assembler” \

“–without-isam” \

“–without-innodb” \

“–without-ndb-debug”\

“enable-profiling”

–enable-assembler \使用一些字符函数的汇编版本

with-extra-charsets=all 对多语言的支持

./configure
–prefix=/usr/local/mysql5 –without-debug –with-big-tables
–with-charset=gbk –with-extra-charsets=all  –with-pthread –enable-static
–enable-thread-safe-client –with-client-ldflags=-all-static
–with-mysqld-ldflags=-all-static –enable-assembler –without-innodb
–without-ndb-debug

======================================================================

key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = 458624 K

MySQL如何计算打开文件数

open_files_limit加入 my.cnf

open_files_limit = n

open_files_limit 比内核最大限制数ulimit -n还大,因此以 open_files_limit 为准

设置 mysql 打开文件限制方法:把 set-variable=open_files_limit=10240 加到配置文件中。

[client]

port            = 3306

socket          = /tmp/mysql.sock

[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

#关闭不需要的表类型

skip-bdb

skip-innodb

skip-locking

back_log=500

local-infile = 0

interactive_timeout=10

#open_files_limit = 3000

skip-locking

# 避免MySQL的外部锁定,减少出错几率增强稳定性

max_tmp_tables

客户端可以同时打开的临时表的最大数。

max_connect_errors = 30000

如果中断的与主机的连接超过该数目,该主机则阻塞后面的连接。你可以用 FLUSH HOSTS语句解锁锁定的主机。

max_connections = 1000

允许的并行客户端连接数目。

#禁止MySQL中用”LOAD DATA LOCAL INFILE”命令。这个命令会利用MySQL把本地文件读到数据库中,然后用户就可以非法获取敏感信息了。网络上流传的一些攻击方法中就有用它的,它也是很多新发现的SQL Injection攻击利用的手段!

local-infile = 0

————————————————————————–

wait_timeout= 10

#设置超时时间,能避免长连接

有时候,如果负载过重,连接会挂起,并且会占用连接表空间。

如果有多个交互用户或使用了到数据库的持久连接,那么将这个值设低一点并不可取!

指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。

服务器在关闭它之前在一个连接上等待行动的秒数。也可见interactive_timeout。

————————————————————————–

connect_timeout=3

####################################################################

connect_timeout 3

<=MYSQLD用來判斷此連線是否有效的時間,建議預設如果網路緩慢可以調高

###################################################################

max_connections=3000(内存1G)    10000(内存2G)

long_query_time=1

key_buffer = 256M(内存1G)      512M(内存2G)

max_allowed_packet = 2M

table_cache = 512(内存1G)      1024内存2G)

sort_buffer_size = 2M(内存1G)  32(内存2G)

read_buffer_size = 2M(内存1G) 32(内存2G)

join_buffer_size = 2M(内存1G)  32(内存2G)

myisam_sort_buffer_size = 64M(内存1G)  128(内存2G)

thread_cache = 8(内存1G)  64(内存2G)

query_cache_limit=1M(内存1G)  4(内存2G)

query_cache_size=32M(内存1G)  64(内存2G)

query_cache_type=1

# Try number of CPU’s*2 for thread_concurrency

thread_concurrency = 4

#skip-networking

# Replication Master Server (default)

# binary logging is required for replication

#log-bin(关闭二进制)

# required unique id between 1 and 2^32 - 1

# defaults to 1 if master-host is not set

# but will not function as a master if omitted

server-id       = 1

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

# Remove the next comment character if you are not familiar with SQL

#safe-updates

[isamchk]

key_buffer = 256M

sort_buffer_size = 256M

read_buffer = 2M

write_buffer = 2M

[myisamchk]

key_buffer = 256M

sort_buffer_size = 256M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

query_cache   table_cache   key_buffer_size

########################################################

进入MySQL,用命令:show variables;

show variables like “max%”;

查看数据库最大可连接数的变量值:max_connections

但实际MySQL服务器允许的最大连接数16384;

添加了最大允许连接数,对系统消耗增加不大。

查看threads_connected

进入MySQL,用命令:show status;

show status like “thread%”;

查看当前活动的连接线程变量值:threads_connected

如果 threads_connected == max_connections 时,

数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现类似强坛的报错信息。

该错误的简便的检查办法是,在刷新强坛页面时,不断监视threads_connected的变化。如果max_connections足够大,而 threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了

此处重要的值是 Threads_created,每次 mysqld 需要创建一个新线程时,这个值都会增加。

如果这个数字在连续执行 SHOW STATUS 命令时快速增加,就应该尝试增大线程缓存。

例如,可以在 my.cnf 中使用 thread_cache_size  = 512 来实现此目的

thread_cache_size线程缓存大小

Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections计算cache命中率

Threads_created           942

Connections               10841380

从上面的对比中.如何多的connections中才942个Threads_created.建议减小thread_cache_size值

########################################################

1.key_buffer_size

key_buffer_size只对MyISAM表起作用

key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般我们设为16M

show status like ‘key_read%’;   ———>key_buffer

key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好

show status like ‘Qcache%’;————>query_cache_size

Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,同时Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小

Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。

Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多query_cache_type指定是否使用查询缓冲

得到如下状态值:

Qcache che指定表高速缓存的大小。

得到如下状态值:

Qcache queries in cache 12737 表明目前缓存的条数

Qcache inserts 20649006

Qcache hits 79060095  看来重复查询率还挺高的

Qcache lowmem prunes 617913 有这么多次出现缓存过低的情况

Qcache not cached 189896

Qcache free memory 18573912  目前剩余缓存空间

Qcache free blocks 5328 这个数字似乎有点大 碎片不少

Qcache total blocks 30953

SHOW STATUS LIKE ‘Open%tables’;———–>table_cache


每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值
Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于
table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了

如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

对于有1G内存的机器,推荐值是128-256。

笔者设置table_cache = 256

得到以下状态:

Open tables 256

Opened tables 9046

虽然open_tables已经等于table_cache,但是相对于服务器运行时间来说,已经运行了20天,opened_tables的值也非常低。因此,增加table_cache的值应该用处不大。

如果运行了6个小时就出现上述值 那就要考虑增大table_cache

SHOW STATUS LIKE “com_select”;

SHOW STATUS LIKE “handler_read_rnd_next”;

Handler_read_rnd_next / Com_select 得出了表扫描比率

在本例中是 521:1。如果该值超过 4000,就应该查看 read_buffer_size,例如 read_buffer_size = 4M。

如果这个数字超过了 8M,就应该与开发人员讨论一下对这些查询进行调优了!

SHOW STATUS LIKE ‘created_tmp%’;

备注:


索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道
key_buffer_size设置是否合理。比例key_reads /
key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用show status like
‘key_reads’获得)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是
MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。

#要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。

back_log
值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值
对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。
默认数值是50

#一个包的最大尺寸。消息缓冲区被初始化为net_buffer_length字节,但是可在需要时增加到
max_allowed_packet个字节。缺省地,该值太小必能捕捉大的(可能错误)包。如果你正在使用大的BLOB列,你必须增加该值。它应该象你
想要使用的最大BLOB的那么大max_allowed_packet = 4M

max_allowed_packet 客户机通信所使用的缓冲区大小的最大值。如果有客户机要发送大量的BLOB 或TEXT 的值,该服务器变量值可能需要增大。

#允许的同时客户的数量。增加该值增加 mysqld要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到链接过多,请联系空间商错误。 默认数值是100

max_connections=1024

#
指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的
状态值Open_tables和Opened_tables,可以决定是否需要增加的值。如果你发现open_tables等于table_cache,
并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用show status like
‘Open_tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能
不稳定或者连接失败.table_cache=512

#每个线程排序所需的缓冲sort_buffer_size = 4M

#当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果你认为连续扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。read_buffer_size = 4M

#
加速排序操作后的读数据,提高读分类行的速度。如果正对远远大于可用内存的表执行GROUP BY或ORDER
BY操作,应增加read_rnd_buffer_size的值以加速排序操作后面的行读取。仍然不明白这个选项的用
处……read_rnd_buffer_size = 8M

#用于REPAIR TABLE。不明白这个选项的用处,百度上找到的设置方向也是五花八门,有128M、64M、32M等,折中选一个myisam_sort_buffer_size = 64M

#
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可
以这个变量值。通过比较 Connections 和 Threads_created
状态的变量,可以看到这个变量的作用thread_cache_size = 128

#查询结果缓存。第一次执行某条SELECT语句的时候,服务器记住该查询的文本内容和它返回的结果。服务器下一次碰到这个语句的时候,它不会再次执行该语句。作为代替,它直接从查询缓存中的得到结果并把结果返回给客户端。query_cache_size = 32M

#最大并发线程数,cpu数量*2  thread_concurrency = 2

#设置超时时间,能避免长连接wait_timeout = 120

#关闭不需要的表类型,如果你需要,就不要加上这个

skip-innodb

skip-bdb

#设定缓存的连接数,节省连接时的开销

back_log  = 64

#禁用文件系统外部锁

external-locking  = 0

#禁用BDB,如果你确实不需要的话,innodb也是如此

skip-bdb

#索引缓冲,如果是专用的数据库服务器,可以设置高达服务器内存的一半,如果不是专用的,还是设置得低一点

key_buffer  = 512M

#缓存数据表数量,如果内存较大,可以设置稍微高一点,否则还是设置低一点

#设置这个参数可以参见系统状态中的 open_tables(表示当前打开的数据表总数) 和 opened_tables(表示所有打开的数据表总数)

table_cache  = 128 对于有1G内存的机器,推荐值是128-256。

#禁用dns解析,如果你的授权信息中采用dns授权方式了,就不能启用该选项

skip-name-resolve

skip-name-resolve

主机名不被解析。所有在授权表的Host的列值必须是IP数字或localhost。

#记录慢查询和没有使用索引的查询,便于帮助分析问题所在

long_query_times指定慢查询的阈值,缺省是10秒

long_query_time    = 1

log-slow-queries  = /usr/local/mysql/data/slow.log

log-queries-not-using-indexes

(1)、back_log:

要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。

back_log
值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值
对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。
试图设定back_log高于你的操作系统的限制将是无效的。

当你观察你的主机进程列表,发现大量 264084 |
unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login |
NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。

(2)、interactive_timeout:

服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。

(3)、key_buffer_size:


引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能
负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为
402649088(400MB)。

(4)、max_connections:

允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。

(5)、record_buffer:

每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M)

(6)、sort_buffer:

每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。

(7)、table_cache:

为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。

(8)、thread_cache_size:


以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以
这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。

(10)、wait_timeout:

服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。

################################################################################################

my-medium.cnf这个配制文件就能满足我们的大多需要

du -h–max-depth=1

1. 修复并优化所有数据库:

本地:

# mysqlcheck -A -r -o -p

远程:

# mysqlcheck -A -r -o -p -h服务器地址

2. 修复并优化指定的数据库:

本地:

# mysqlcheck -u用户名 -p密码 -r -o 库名

远程:

# mysqlcheck –u用户名 -p密码 -h服务器地址 -r -o 库名

有的时候因为掉电或者其他原因导致数据库损坏,我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库;例如

检查优化并修复所有的数据库用:

# mysqlcheck -A -o -r -p

Enter password:

database1 OK

database2 OK

———-

修复指定的数据库用

# mysqlcheck -A -o -r Database_NAME -p

即可

另外如果只是对某个表进行修复可以用:myisamchk或isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

myisamchk tablename.MYI

进行检测,如果需要修复的话,可以使用:

myisamchk -of tablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

###############################################################################################

清理mysql的日志文件

发现var/db/mysql目录下有这么多

mysql-bin.000001



mysql-bin.000023

mysql-bin.index

而且比较大

数据库的操作日志

mysql> reset master;

可以清理这些文件。

如果做了replication,清理之前要确认slave端已经同步了所有log

my.cnf中去掉log-bin就可不让生成这些日志文件了。

#################################################################################################

win2003

优化实例my.ini

内存1G的优化:

[mysqld]

basedir=D:/AndyServer/MySQL5.0

datadir=D:/AndyServer/MySQL5.0/data

port=3306

key_buffer=256M

max_allowed_packet=2M

table_cache=512

thread_cache=32

join_buffer_size=16M

sort_buffer=16M

record_buffer=16M

max_connections=500

wait_timeout=120

interactive_timeout=120

max_connect_errors=30000

long_query_time=1

max_heap_table_size=128M

tmp_table_size=64M

thread_concurrency=8

myisam_sort_buffer_size=64M

内存2G的优化:

[mysqld]

basedir=D:/AndyServer/MySQL5.0

datadir=D:/AndyServer/MySQL5.0/data

port=3306

key_buffer=384M

max_allowed_packet=4M

table_cache=1024

thread_cache=64

join_buffer_size=32M

sort_buffer=32M

record_buffer=32M

max_connections=500

wait_timeout=120

interactive_timeout=120

max_connect_errors=30000

long_query_time=1

max_heap_table_size=256M

tmp_table_size=128M

thread_concurrency=8

myisam_sort_buffer_size=128M

skip-bdb

back_log=500

skip-locking

skip-innodb

skip-name-resolve

query_cache_limit=1M

query_cache_size=64M

query_cache_type=1

max_allowed_packet = 2M

修改了mysql系统数据库中user表的host字段为ip地址

注意win服务器加了这个选项 数据库的连接必须用ip地址了

另外还必须到C:\WINDOWS\system32\drivers\etc\hosts

加入 ip  localhost才能

开启慢查询

long_query_time = 2

log-slow-queries = D:\Program Files\MySQL\mysqlslowquery.log

分析:连接数超过了mysql设置的值 max_connections 和wait_timeout 都有关系。wait_timeout的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。

解决:修改my.ini的max_connections 和wait_timeout 前者调大后者调小一些。

########################################################

故障处理:

MySQL 的max_allowed_packet保护导致MySQL Server 不断的启停

可能请求的连接包过大,检查配置文件,其中并没有max_allowed_packet声明。在配置文件中,设置max_allowed_packet=2M后,重新启动MySQL,问题解决!


出SQL的时候发生了错误,提示Table XXX is marked as crashed and should be repaired
when using LOCK TABLES,应该是数据表结构或内容损坏,使用命令myisamchk修复数据库的MYI文件即可

myisamchk -c -r *.MYI

=============================================================

Mysql的安全设置

打开/etc/my.cnf文件,修改以下设置,如果没有,可手动添加。

#取消文件系统的外部锁

skip-locking

#不进行域名反解析,注意由此带来的权限/授权问题

skip-name-resolve

这个参数可以解决,远程连接MySQL速度慢的解决办法

修改了mysql系统数据库中user表的host字段就

#禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。这个命令会利用MySQL把本地文件读到数据库中,然后用户就可以非法获取敏感信息了。网络上流传的一些攻击方法中就有用它的,它也是很多新发现的SQL Injection攻击利用的手段!

local-infile = 0

#
关闭远程连接,即3306端口。这是MySQL的默认监听端口。由于此处MySQL只服务于本地脚本,所以不需要远程连接。尽管MySQL内建的安全机制
很严格,但监听一个TCP端口仍然是危险的行为,因为如果MySQL程序本身有问题,那么未授权的访问完全可以绕过MySQL的内建安全机制。(你必须确
定,你是否真的不需要远程连接mysql)

skip-networking

修改完my.cnf后,还需要对mysql的用户名、帐号、及默认数据库进行调整

首先先登录mysql,在终端窗口输入  /home/mysql/bin/mysql -u root -p

然后会提示输入密码,输入正确密码后,会出现mysql>提示符。

输入以下命令:

mysql>use mysql;

mysql>update user set user=”centos” where user=”root”;      (将mysql的root用户名修改成centos,防止root的密码被暴力破解)

mysql>select Host,User,Password,Select_priv,Grant_priv from user;

mysql>delete from user where user=”;                  (删除user用户)

mysql>delete from user where password=”;              (删除user用户)

mysql>delete from user where host=”;                    (删除user用户)

mysql>drop database test;            (删除默认的test数据库)

mysql>flush privileges;              (刷新mysql的缓存,让以上设置立即生效)

mysql>quit;

为了使以上优化和安全设置生效,请重启Mysql服务或Linux。

chmod 600 /etc/my.cnf

========================================================

Windows用户请注意: FAT和VFAT (FAT32)不适合MySQL的生产使用。应使用NTFS

在默认情况下,MySQL创建的MyISAM表允许的最大尺寸为4GB。你可以使用SHOW TABLE STATUS语句或myisamchk -dv tbl_name检查表的最大尺寸。

个人建议:MySQL的主要瓶颈在PORT的连接数上,因此,将表结构优化好以后,相应单个MySQL服务的CPU占用仍然在10%以上,就要考虑将服务拆分到多个PORT上运行了

===========================================================

方法:


MySQL的status查看MySQL服务的运行统计和show
processlist来查看当前服务中正在运行的SQL,如果某个SQL经常出现在PROCESS
LIST中,一.有可能被查询的此时非常多,二里面有影响查询的字段没有索引,三.返回的结果数过多数据库正在排序(SORTING);所以做一个脚本:
比如每2秒运行以下show processlist;把结果输出到文件中,看到底是什么查询在吃CPU。

十四、重要的MySQL启动选项

back_log 如果需要大量新连接,修改它。

thread_cache_size 如果需要大量新连接,修改它。

key_buffer_size 索引页池,可以设成很大。

bdb_cache_size BDB表使用的记录和键吗高速缓存。

table_cache 如果有很多的表和并发连接,修改它。

delay_key_write 如果需要缓存所有键码写入,设置它。

log_slow_queries 找出需花大量时间的查询。

max_heap_table_size 用于GROUP BY

sort_buffer 用于ORDER BY和GROUP BY

myisam_sort_buffer_size 用于REPAIR TABLE

join_buffer_size 在进行无键吗的联结时使用。

============================================================
(责任编辑:IT)