国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页数据库类MySQL → MySQL数据库优化经验详谈

MySQL数据库优化经验详谈

我要评论 2010/02/07 13:03:26 来源:国语自产精品视频在线看 编辑:绿色资源站 [ ] 评论:0 点击:330次

同时在线访问量继续增大 对于1G内存的💈服务器【fú wù qì】🏄明显感【míng xiǎn gǎn】觉到吃【jiào dào chī】力严重时甚至每天都会死机⌛ 或者时【huò zhě shí】不时的【bú shí de】服务器【fú wù qì】🏄卡一下🔘 这个问【zhè gè wèn】题曾经困扰了我半个【wǒ bàn gè】🏫多月MySQL使用是很具伸㊗缩性的🈚算法❇,因此你【yīn cǐ nǐ】通常能【tōng cháng néng】🛺用很少的内存运行或【yùn háng huò】😰给MySQL更多的被存以【bèi cún yǐ】得到更【dé dào gèng】🕳好的性🐈能🛺。

安装好💡mysql后🐕,配制文【zhì wén】🎱件应该😾在【zài】/usr/local/mysql/share/mysql目录中😣,配制文【zhì wén】🎱件有几【jiàn yǒu jǐ】个,有【yǒu】my- huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的💣网站和【wǎng zhàn hé】不同配制的服务器环【wù qì huán】境,当然需【dāng rán xū】🎁要有【yǒu】不同的配制文【zhì wén】🎱件了。

一般的【yī bān de】情况下🖕,my-medium.cnf这个配【zhè gè pèi】制文件💊就能满【jiù néng mǎn】足我们【zú wǒ men】的大多需要🎍;一般我【yī bān wǒ】💙们会把【men huì bǎ】配置文🥀件拷贝到【dào】/etc/my.cnf 只需要🎍修改这个配【zhè gè pèi】置文🥀件就可【jiàn jiù kě】以了【yǐ le】,使用🕯mysqladmin variables extended-status –u root –p 可以看到【dào】目前的参数,有3个配置参数是🍺最重要⛷的,即:


key_buffer_size
query_cache_size
table_cache

key_buffer_size只对🖊MyISAM表起作【biǎo qǐ zuò】用。

key_buffer_size指定索【zhǐ dìng suǒ】引缓冲🖨区的📤大小,它决定【tā jué dìng】索引处【suǒ yǐn chù】理的📤速度,尤其是索引读的📤速度。一般我们设为【men shè wéi】16M,实际上🛅稍微大一点的【yī diǎn de】📤站点 这个数字是远远不够的📤,通过检🌡查状态值🌈Key_read_requests和【hé】🦕Key_reads,可以知【kě yǐ zhī】道【dào】key_buffer_size设置是否合理🎍。比例【bǐ lì】key_reads / key_read_requests应该尽【yīng gāi jìn】可能的🥍低,至少是【zhì shǎo shì】1:100,1:1000更好(上述状【shàng shù zhuàng】态值🌈可以使用SHOW STATUS LIKE ‘key_read%’获得)。 或者如💸果你装【guǒ nǐ zhuāng】了【le】😮phpmyadmin 可以通过服务【guò fú wù】器运行🔴状态看⛎到,笔者推【bǐ zhě tuī】荐用phpmyadmin管理mysql,以下的📏状态值🌈都是本人通过【rén tōng guò】🚁phpmyadmin获得的【huò dé de】🤫实例分🚙析🛳:

这个服务器已经运行了20天


key_buffer_size – 128M
key_read_requests – 650759289
key_reads - 79112

比例接近1:8000 健康状况非常好

另外一【lìng wài yī】个估计key_buffer_size的办法:把你网【bǎ nǐ wǎng】⬆站数据库的每个表的【gè biǎo de】索引所占空间🎙大【dà】小加🥜起来看【qǐ lái kàn】⭕看以此服务器【fú wù qì】为例:比较大【dà】🤙的几个【de jǐ gè】🆓表索引❕加起来大【dà】概125M 这个数字会随【zì huì suí】着表变🦉大【dà】而变大【dà】。

从4.0.1开始🐮,MySQL提供了【tí gòng le】查询缓冲【xún huǎn chōng】机制。使用查🦗询缓冲【xún huǎn chōng】,MySQL将【jiāng】SELECT语句和【yǔ jù hé】😳查询结果存放📠在缓冲【zài huǎn chōng】区中,今后对【jīn hòu duì】于同样的【de】🕉SELECT语句(区分大💴小写【xiǎo xiě】),将【jiāng】直接🧤从缓冲区中读取结果【qǔ jié guǒ】。根据【gēn jù】MySQL用户手🤥册🍆,使用查🦗询缓冲【xún huǎn chōng】最多可以达到238%的【de】🕉效率。

通过调🦍节以下几个参数可以✉知道【zhī dào】query_cache_size设置得是否合【shì fǒu hé】🔛理【lǐ】


Qcache inserts
Qcache hits
Qcache lowmem prunes
Qcache free blocks
Qcache total blocks

Qcache_lowmem_prunes的值非常大📿,则表明【zé biǎo míng】经常出现缓冲【chōng】✡不够的🚟情况,同时Qcache_hits的值非常大📿,则表明【zé biǎo míng】查询缓【chá xún huǎn】冲【chōng】📒使用非常频【cháng pín】❣繁【fán】,此时需要增加📩缓冲【chōng】✡大小Qcache_hits的值不👎大,则表明【zé biǎo míng】你的查📈询重复率【lǜ】很低,这种情【zhè zhǒng qíng】况下使用查询缓【chá xún huǎn】冲【chōng】📒反而会影响效【yǐng xiǎng xiào】率【lǜ】🥍,那么可以考虑【yǐ kǎo lǜ】🐆不用查【bú yòng chá】😚询缓冲【chōng】📒。此外【cǐ wài】,在🏎SELECT语句中【yǔ jù zhōng】加入SQL_NO_CACHE可以明确表示Ⓜ不使用😸查询缓【chá xún huǎn】冲【chōng】📒。

Qcache_free_blocks,如果该值非常♍大【dà】,则表明【zé biǎo míng】缓冲区【huǎn chōng qū】📹中碎片很多🤓query_cache_type指定是否使用【fǒu shǐ yòng】查询缓冲🏨

我设置:


query_cache_size = 32M
query_cache_type= 1

得到如下状态值:


Qcache queries in cache 12737 表明目【biǎo míng mù】🕯前缓存的条数
Qcache inserts 20649006
Qcache hits 79060095  看来重🎊复查询【fù chá xún】🖋率还挺高的
Qcache lowmem prunes 617913 有这么多次出现缓存过低的【guò dī de】情况
Qcache not cached 189896   
Qcache free memory 18573912  目前剩【mù qián shèng】❓余缓存【yú huǎn cún】空间
Qcache free blocks 5328 这个数字似乎🥧有点大【yǒu diǎn dà】💌 碎片不少
Qcache total blocks 30953

如果内存允许32M应该要往上加点

table_cache指定表高速缓🍱存的大🏼小【xiǎo】。每当🎷MySQL访问一【fǎng wèn yī】个表时,如果在【rú guǒ zài】🤚表缓冲🚫区中还🛹有空间【yǒu kōng jiān】,该表就被打开并放入【bìng fàng rù】👬其中【qí zhōng】,这样可以更快地访问【dì fǎng wèn】表内容。通过检查峰值🔤时间的🎈状态值【tài zhí】⬅Open_tables和⬅Opened_tables,可以决定是否需要增【xū yào zēng】加table_cache的值【de zhí】🔤。如果你发现open_tables等于table_cache,并且opened_tables在不断【zài bú duàn】增长【zēng zhǎng】,那么你【nà me nǐ】就需要增【xū yào zēng】加table_cache的值【de zhí】🔤了(上述状态值【tài zhí】⬅可以使【kě yǐ shǐ】用SHOW STATUS LIKE ‘Open%tables’获得【huò dé】)。注意📛,不能盲目地把【mù dì bǎ】table_cache设置成🖤很大的值【de zhí】🔤。如果设置得太高,可能会造成文【zào chéng wén】件描述【jiàn miáo shù】🔌符不足,从而造🍻成性能🍮不稳定🕸或者连【huò zhě lián】🧠接失败。

对于有1G内存的🛐机器【jī qì】,推荐值💻是【shì】128-256。

笔者设置【zhì】💐table_cache = 256

得到以下状态:


Open tables 256
Opened tables 9046

虽然【suī rán】🌼open_tables已经等于🎿table_cache,但是相🔻对于🎿服务器运【yùn】🗓行时间【háng shí jiān】来说,已经运【yùn】行了🆕20天【tiān】,opened_tables的值也非常低【fēi cháng dī】。因此【yīn cǐ】🏉,增加table_cache的值应【de zhí yīng】该用处不大😎。如果运【rú guǒ yùn】行了🆕6个小时就出现上述值【shàng shù zhí】 那就要考虑增🕰大table_cache。

如果你不需要【bú xū yào】🐤记录🔊2进制【jìn zhì】log 就把这【jiù bǎ zhè】🛬个功能关掉👹,注意关掉👹以后就不能恢【bú néng huī】复出问【fù chū wèn】题前的数据了,需要您【xū yào nín】🎣手动备👴份😒,二进制日【jìn zhì rì】志包含所有更新数【gèng xīn shù】🎹据的语句,其目的【qí mù de】是在恢【shì zài huī】🏐复数据【fù shù jù】库时用📙它来把数据尽可能恢🛫复到最后的状态【tài】。另外,如果做同步复🏊制【zhì】( Replication )的话【de huà】,也需要🎛使用二🗑进制日【jìn zhì rì】志传送修改情况。

log_bin指定日【zhǐ dìng rì】志文件,如果不【rú guǒ bú】提供文件名,MySQL将自己【jiāng zì jǐ】产生缺🔦省文件名。MySQL会在文件名后♋面自动【miàn zì dòng】添加数🍴字引,每次启🐞动服务时📬,都会重😁新生成一个新【yī gè xīn】的二进【de èr jìn】😪制文件【zhì wén jiàn】。

此外,使用【shǐ yòng】📿log-bin-index可以指【kě yǐ zhǐ】🍮定索引文件【wén jiàn】💣;使用【shǐ yòng】📿binlog-do-db可以指【kě yǐ zhǐ】🍮定记录【dìng jì lù】📥的数据库【jù kù】⛎;使用【shǐ yòng】📿binlog-ignore-db可以指【kě yǐ zhǐ】🍮定不记【dìng bú jì】录的数🥓据库【jù kù】🏰。注意的是:binlog-do-db和🛤binlog-ignore-db一次只【yī cì zhī】指定一个数据库【jù kù】⛎,指定多【zhǐ dìng duō】个数据库【jù kù】⛎需要多个语句【gè yǔ jù】🏊。而且🚆,MySQL会将所有的数据库【jù kù】⛎名称改【míng chēng gǎi】成📺小写,在指定【zài zhǐ dìng】数据库【jù kù】⛎时必须全部使【quán bù shǐ】🤚用⛓小写名字,否则不【fǒu zé bú】会起作用⛓。

关掉这个功能只需要在他前面加上#号

#log-bin

开启慢【kāi qǐ màn】查询【chá xún】⭕日志【rì zhì】🕒( slow query log ) 慢查询【chá xún】⭕日志【rì zhì】🕒对于跟【duì yú gēn】踪有问题【tí】😱的查询【chá xún】🥟非常有【fēi cháng yǒu】用。它记录所有查【suǒ yǒu chá】过【guò】😭long_query_time的查询【chá xún】🥟,如果需要,还可以🚎记录不使用索引的记录。下面是一个慢查询【chá xún】⭕日志【rì zhì】🕒的例子【de lì zǐ】🏘:

开启慢查询日志【zhì】♋,需要设🗞置参数【zhì cān shù】log_slow_queries、long_query_times、log-queries-not-using-indexes。

log_slow_queries指定日💶志文件🌄,如果不提供文件名【míng】,MySQL将自己🚻产生缺【chǎn shēng quē】省文件【shěng wén jiàn】名【míng】。

long_query_times指定慢😖查询的

关键词:MySQL,数据库【shù jù kù】🔖优化【yōu huà】

阅读本文后您有什么感想? 已有 人给出评价!

  • 0 欢迎喜欢
  • 0 白痴
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙视