有关max_connect_errors参数
[
2009/02/18 17:58 | by askwan ]
2009/02/18 17:58 | by askwan ]
配置文件中max_connect_errors这个参数表示,同一个IP地址最大错误连接数目,就是说如果连接失败,并且超过这个数字后,mysql将拒绝这个IP再次连接,这个数字设置的太大没有必要,设置的小一点,可以防止某些恶意攻击。500-1000比较合适,看有的兄弟把这个值设置为10000000,真是汗一个,如果遇上有人搞破坏,撑不到这个数,机器就已经挂了,只能你硬重启,也无从发现问题;设置的小一点,这样应用程序和数据库之间的连接出现问题了,发现后也可以及时的处理。
如果发现是网络原因,最后应用程序无法连接数据库而报错,只需要在数据库上flush-hosts就行。
如果发现是网络原因,最后应用程序无法连接数据库而报错,只需要在数据库上flush-hosts就行。
与Innodb引擎有关的配置说明
[
2009/02/18 17:34 | by askwan ]
2009/02/18 17:34 | by askwan ]
skip-inodb
不加载INODB数据引擎驱动,如果项目不使用INNODB引擎,可以关闭,以节省系统内存
innodb-file-per-table
设置以后,为每个新数据表分别创建一个表空间tablespace文件,默认情况下都放在一个文件里,这样有弊端,以后我在自己博文中将单独对这个地方进行说明。
innodb_buffer_pool_size
innodb的缓冲区大小,用来存放数据和索引,Innodb在线的文档表示要设置为机器内存的50%-80%来做这个缓冲区!
这个可以说是Innodb引擎下配置选项中最关键的参数选项了,对性能的影响也是最大的。
innodb_log_buffer_size
InnoDB事务日志文件缓冲区大小,默认8M
innodb_flush_method
Innodb日志文件同步刷新的方法,取值有两个 fdatasync ,O_DSYNC,只是Uinx和linux系统下两个不同的调用函数区别。
innodb_additional_mem_pool_size
innodb用于内部管理的各种数据结果分配的缓冲区大小,默认1M
innodb_data_home_dir
InnoDB数据文件的主目录
innodb_data_file_path
Innodb 数据文件配置方式
innodb_log_files_in_group
Innodb使用多少个日志文件,默认2
innodb_log_file_size
Innodb日志文件最大限制尺寸,默认5M
innodb_lock_wait_timeout
等待数据锁的超时时间,可以避免死锁,超过这个时间没有获取结果,就ROOLBACK回滚放弃。
innodb_flush_log_at_trx_commit
Innodb日志提交的方式,0,1,2可供取值,0表示每间隔一秒就写一次日志并进行同步,减少了硬盘写操作次数,可以提高性能,1表示每执行完COMMIT就写一次日志并进行同步,默认值,2表示每执行完一次COMMIT写一次日志,每间隔一秒进行一次同步,这个参数在Innodb里同样是关键参数,对性能影响较大。
innodb_force_recovery
在Innodb的自动恢复失败后,从Crash中强制启动
不加载INODB数据引擎驱动,如果项目不使用INNODB引擎,可以关闭,以节省系统内存
innodb-file-per-table
设置以后,为每个新数据表分别创建一个表空间tablespace文件,默认情况下都放在一个文件里,这样有弊端,以后我在自己博文中将单独对这个地方进行说明。
innodb_buffer_pool_size
innodb的缓冲区大小,用来存放数据和索引,Innodb在线的文档表示要设置为机器内存的50%-80%来做这个缓冲区!
这个可以说是Innodb引擎下配置选项中最关键的参数选项了,对性能的影响也是最大的。
innodb_log_buffer_size
InnoDB事务日志文件缓冲区大小,默认8M
innodb_flush_method
Innodb日志文件同步刷新的方法,取值有两个 fdatasync ,O_DSYNC,只是Uinx和linux系统下两个不同的调用函数区别。
innodb_additional_mem_pool_size
innodb用于内部管理的各种数据结果分配的缓冲区大小,默认1M
innodb_data_home_dir
InnoDB数据文件的主目录
innodb_data_file_path
Innodb 数据文件配置方式
innodb_log_files_in_group
Innodb使用多少个日志文件,默认2
innodb_log_file_size
Innodb日志文件最大限制尺寸,默认5M
innodb_lock_wait_timeout
等待数据锁的超时时间,可以避免死锁,超过这个时间没有获取结果,就ROOLBACK回滚放弃。
innodb_flush_log_at_trx_commit
Innodb日志提交的方式,0,1,2可供取值,0表示每间隔一秒就写一次日志并进行同步,减少了硬盘写操作次数,可以提高性能,1表示每执行完COMMIT就写一次日志并进行同步,默认值,2表示每执行完一次COMMIT写一次日志,每间隔一秒进行一次同步,这个参数在Innodb里同样是关键参数,对性能影响较大。
innodb_force_recovery
在Innodb的自动恢复失败后,从Crash中强制启动
Mysql复合索引Multiple-Column Indexes
[
2009/02/18 15:11 | by askwan ]
2009/02/18 15:11 | by askwan ]
Mysql可以可以为一个表的多个列创建索引,最多为15个列,并且可以索引列的前缀,以减少索引长度,提高效率。
多列索引实际上是“considered a sorted array containing values that are created by concatenating the values of the indexed columns” 包含通过连接索引列的值而创建的值的排序的数组。
手册上的例子:
这样就为test表创建了一个多列索引,要使其对SELECT语句产生效果,WHERE语句右边首先要是第一个键值last_name,其次是
first_name, 否认建立的索引不起作用。
总结一下:
对于形如 INDEX(A,B)形式的多列索引,如果查询操作之需要首先用到A列的索引,就可以使用这种多列索引,同时要用到A和B的那当然没有问题,如果只用到B,那就要注意语句的写法了。
例如例子中:
而这个确没有用到last_name索引,索引没有用了
对于形如 INDEX(A,B,C)形式多列索引,简单的说 ,就是可以当作(A),(A,B),(A,B,C)的索引来使用,但是不能当作(B),(B,C),(C)的索引来使用,其他依次类推!
对于(A,B,C)这样的索引性能与单列的组合索引(A) ,(B),(C)性能高低问题,这里给了一个答案:http://www.mysqlperformanceblog.com/2008/08/22/multiple-column-index-vs-multiple-indexes/
作者的总结:
大意是说对多个列建索引比对每个列分别建索引更有优势……。
--------------END---------------
多列索引实际上是“considered a sorted array containing values that are created by concatenating the values of the indexed columns” 包含通过连接索引列的值而创建的值的排序的数组。
手册上的例子:
CREATE TABLE test (
id INT NOT NULL,
last_name CHAR(30) NOT NULL,
first_name CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (last_name,first_name)
);
这样就为test表创建了一个多列索引,要使其对SELECT语句产生效果,WHERE语句右边首先要是第一个键值last_name,其次是
first_name, 否认建立的索引不起作用。
总结一下:
对于形如 INDEX(A,B)形式的多列索引,如果查询操作之需要首先用到A列的索引,就可以使用这种多列索引,同时要用到A和B的那当然没有问题,如果只用到B,那就要注意语句的写法了。
例如例子中:
SELECT * FROM test WHERE last_name='Widenius';
只用到 last_name索引SELECT * FROM test WHERE last_name='Widenius' AND first_name='Michael';
SELECT * FROM test WHERE last_name='Widenius' AND (first_name='Michael' OR first_name='Monty');
SELECT * FROM test WHERE last_name='Widenius' AND first_name >='M' AND first_name < 'N';
SELECT * FROM test WHERE first_name='Michael';
而这个确没有用到last_name索引,索引没有用了
对于形如 INDEX(A,B,C)形式多列索引,简单的说 ,就是可以当作(A),(A,B),(A,B,C)的索引来使用,但是不能当作(B),(B,C),(C)的索引来使用,其他依次类推!
对于(A,B,C)这样的索引性能与单列的组合索引(A) ,(B),(C)性能高低问题,这里给了一个答案:http://www.mysqlperformanceblog.com/2008/08/22/multiple-column-index-vs-multiple-indexes/
作者的总结:
Quotation
Conclusion: For benchmarked queries we can see Multiple Column index beats Index Merge in all cases when such index can be used. It is also worth to watchout a MySQL may decide not to do Index merge (either intersection or union) but instead do full table scan or access table picking only one index on the pair.
大意是说对多个列建索引比对每个列分别建索引更有优势……。
--------------END---------------
索引更新有关的参数DELAY_KEY_WRITE
[
2009/02/18 12:49 | by askwan ]
2009/02/18 12:49 | by askwan ]
对于一个比较大的表,对某些列加了索引后,可以加快数据检索速度,但是,对数据修改操作却会很慢,因为每修改一次记录,索引就必须刷新一次,所以说,索引也是一把双刃剑,为了在某种程度弥补这个问题,就引出了我今天要说了这个参数
DELAY_KEY_WRITE
这个参数的意义是,在表被关闭之前,对表的修改操作只是更新数据到磁盘,而不更新索引到磁盘,而是把对索引的更新结果放在内存里,当表被关闭的时候再一起更新到磁盘里。所以,这个参数的作用还是很明显的,它可以暂时阻止Mysql在数据表的记录被改变是立刻对索引进行刷新,对索引的刷新将等到全部记录修改完毕,表被关闭后再进行,从而避免了频繁的刷新索引带来系统的开销,一定程序上提高了性能。
我们可以使用ALTER TABLE table DELAY_KEY_WRITE = 1,让这个参数对这table这个表生效,也可以在mysql启动的时候加入参数--delay_key_write[= OFF | ON | ALL],ALL表示这个参数将对所有的打开的表都有效。要注意一点,这个参数值对MYISAM存储引擎有效。




