Mysql的几个设置值

Mysql的几个设置值

mysql数据库的优化——老声长谈的话题,总是有那么多的话题好谈。闲来无事,谈谈几个关键优化参数的设置问题。注意的是,本文主要针对于MyISAM引擎,其他的,日后再吧。

在此之前,如果对mysql的命令和配置不很熟的情况下,phpmysql是必要的。

首先,到状态选项栏,拉一个系统状态表下来,或者执行mysqladmin variables extended-status –u root –p  ,同时计算下系统的uptime.

配置文件一般保存在/etc/my.cnf中,直接修改其中的内容即可。

此外,我的设置中还有如下内容:

skip-networking #不使用网络连接
skip-innodb #不使用innodb引擎

thread_concurrency = 4 #这个数值等于cpu核心数x2

 

key_buffer_size参数的设置:索引缓冲池大小,决定了处理索引的速度。官方文档说最多这将会有238%的性能提升。什么,你的表不加索引?来人啊,把他拖到这个页面。

  1. 算法一:把系统中所有在用的表的索引加起来,个人习惯取一个最接近此数的2的n次方。如32M,64M,128M……
  2. 算法二:设置到Key_reads  :Key_read_requests 至少应该1:500以上,越大越好,例如我的:
    [root@www ~]# mysqladmin variables extended-status -u admin -p  |grep Key_re
    Enter password:
    | Key_read_requests        | 7335599   |
    | Key_reads                          | 9137      |

两种方式随个人喜好啦,个人习惯用后面的方式进行配置。

query_cache_size:返回结果缓存,数据库会将返回值缓冲,当然会快,如果想要强制关闭该功能,可以在sql中加入SQL_NO_CACHE。

[root@www ~]# mysqladmin variables extended-status -u admin -p  |grep Qcache
Enter password:
| Qcache_free_blocks       | 115       |
| Qcache_free_memory       | 27422464  | #剩余的缓冲空间
| Qcache_hits              | 15257     |
| Qcache_inserts           | 11492     |
| Qcache_lowmem_prunes     | 0         | #出现缓存过低的此数
| Qcache_not_cached        | 29        |
| Qcache_queries_in_cache  | 1115      | #缓存的结果数
| Qcache_total_blocks      | 2441      |
| Questions                | 43849     |

次数值大致算法:最大返回大小x每5分钟查询次数。

原则上,如果内存足够的情况下,可以尽量调大此数值。个人认为  uptime 秒数/Qcache_lowmem_prunes  应该小于300。这意味着至少不是每5分钟系统就报一次缓存过低。

要注意的是配置了此参数的时候,请同时设置 query_cache_type= 1

table_cache:表缓冲数量。

mysqladmin variables extended-status -u admin -p  |grep Open
Enter password:
| Open_files               | 191       |
| Open_streams             | 0         |
| Open_tables              | 132       | #打开的表
| Opened_tables            | 138       | #已经打开的表

我这边设置的table_cache为512,uptime为2小时,暂时看不出有什么问题,如果系统一开没多久Open_tables就已经等于设置的table_cache的时候,请将此数值再调大。

关于索引:刚才被拖走的兄弟可以回来了^_^
很多人最初接触索引的时候,以为索引越多越快。其实不然,过多的索引往往会拖慢系统,按照惯例索引字段最多只占字段总数的40%。多则无益。

索引字段的类型,尽量选择numeric下属的类型或者date time下属的类型,如果非要用string,可以尝试使用char来取代varchar,很多情况下不影响使用,但性能提升一个档次。

关于内存

经过上面的折腾,内存耗用量应该大有提升。很多人觉得内存占用高了性能会下降——这似乎是windows桌面的问题。要知道,作为一个数据库服务器而言,痛苦的不是内存用完了;而是内存用不掉,IO用光了。 能把内存用的光光但swap基本不动,这才是高明的系统管理员。

正常负载下,mysql的内存耗用要保证大于空闲内存。

sql语句的问题

尽管这不属于系统管理员的工作内容,但要知道,一个到处是select * 语句的程序是绝对会影响系统性能的。

你可能感兴趣的:(mysql,数据库,职场,mysql优化,休闲)