• MySQL办事维护笔记(下)


    来源:网海拾贝  




    哄骗的希图要点

        假如MySQL哄骗占用的CPU超过10%就应该思索优化了。

        1.假如这个办事可以被其他非数据库哄骗替代(比方良多基于数据库的计数器完全可以用WEB日记统计替代)最好将其禁用。非用数据库不行吗?固然数据库实在真实可以简化良多哄骗的结构希图,但本身也是一个体系资源消耗比力年夜的哄骗。在某些景遇下文本,DBM比数据库是更好的选择,比方:良多哄骗假如没有很高的实时统计需求的话,完全可以先记载到文件日记中,活期的导入到数据库中做后续统计理睬。假如仍是需求记载复杂的2维键-值对应结构的话可以哄骗类似于DBM的HEAP范例表。由于HEAP表完整相对在内存中存取,效用迥殊很是高,但办事器俄然断电时丰年夜约泛起数据丧失,以口角常得当存储在线用户信息,日记等暂且数据。即使需求哄骗数据库的,哄骗假如没有太巨年夜的数据完好性需求的化,完全可以不哄骗那些支撑外键的商业数据库,比方MySQL。只要迥殊很是需求完好的商业逻辑和事件完好性的时候才需求Oracle这样的年夜型数据库。对于高负载哄骗来说完全可以把日记文件,DBM,MySQL等轻量级体式格局做前端数据搜罗格局,然后用Oracle MSSQL DB2 Sybase等做数据库堆栈以完成巨年夜的数据库发掘理睬义务。

        有朋侪和我说用规范的MyISAM表替代了InnoDB表以后,数据库效用提高了20倍。

        2.数据库办事的紧张瓶颈:单个办事的毗邻数。对于一个哄骗来说,假如数据库表结构的希图可以遵照数据库道理的范式来希图的话,而且已经哄骗了最新版本的MySQL,而且遵照比力优化的体式格局运转了,那么末尾的紧张瓶颈一样寻常在于单个办事的毗邻数,即使一个数据库可以支撑并发500个毗邻,最好也不要把哄骗用到这个境界,由于并发毗邻数过大都据库办事本身用于调度的线程的开支也会迥殊很是年夜了。以是假如哄骗允许的话:让一台机械多跑几个MySQL办事分担。将办事平衡的希图到多个MySQL办事端口上:比方app_1 ==> 3301 app_2 ==> 3302...app_9 ==> 3309。一个1G内存的机械跑上10个MySQL是很正常的。让10个MySQLD承担1000个并发毗邻效用要比让2个MySQLD承担1000个效用高的多。固然,这样也会带来一些哄骗编程上的巨年夜度;

        3.哄骗单独的数据库办事器(不要让数据库和前台WEB办事抢内存),MySQL拥有更多的内存就年夜约能无效的截止成就集的缓存;在前面的启动剧本中有一个-O key_buffer=32M参数即是用于将缺省的8M索引缓存添加到32M(固然对于)

        4.哄骗只管即苟且用PCONNECT和polling机制,用于节流MySQL办事建立毗邻的开支,但也会构成MySQL并发链接数过多(每个HTTPD城市对应一个MySQL线程);

        5.表的横向拆分:让最常被访问谋面的10%的数据放在一个小表里,90%的汗青数据放在一个归档表里(所谓:快慢表),数据中央经由历程活期“搬家”和活期删除无效数据来节流,终究年夜部门哄骗(比方论坛)访问谋面2个月前数据的几率会迥殊很是少,而且价值也不是很高。这样对于哄骗来说总是在一个比力小的成就级中截止数据选择,比力有利于数据的缓存,不要指望MySQL中对单表记载条数在10万级以上还有比力高的效用。而且偶然候数据没有需求做那么切确,比方一个快表中查到了某个人揭晓的文章有60条成就,快表和慢表的比例是1:20,那么就可以复杂的估量这个人一共揭晓了1200篇。Google的搜索成就数也是一样:对于良多上十万的成就数,前面良多的数字都是经由历程必然的算法估量出来的。

        6.数据库字段希图:表的纵向拆分(过渡范化):将完整相对的定长字段(char, int等)放在一个表里,完整相对的变长字段(varchar,text,blob等)放在别的一个表里,2个表之间经由历程主键联络相干,这样,定长字段表可以失失很年夜的优化(这样可以哄骗HEAP表范例,数据完全在内存中存取),这里也声名别的一个准绳,对于我们来说,只管即苟且用定长字段可以经由历程空间的损失交换访问谋面效用的提高。在MySQL4中也泛起了支撑外键和事件的InnoDB范例表,规范的MyISAM格局表和基于HASH结构的HEAP内存表,MySQL之以是支撑多种表范例,实践上是针对不同哄骗提供了不同的优化体式格局;

        7.仔细的反省哄骗的索引希图:可以在办事启动参数中到场 --log-slow-queries[=file]用于跟踪理睬哄骗瓶颈,对于跟踪办事瓶颈最复杂的要领即是用MySQL的status反省MySQL办事的运转统计和show processlist来反省以后办事中正在运转的SQL,假如某个SQL屡屡出面前目今当今PROCESS LIST中,一。丰年夜约被盘问的此时迥殊很是多,二,里面有影响盘问的字段没有索引,三,前去的成就数过大都据库正在排序(SORTING);以是做一个剧本:比方每2秒运转以下show processlist;把成就输出到文件中,看本相是什么盘问在吃CPU。

        8.全文检索:假如响应字段没有做全文索引的话,全文检索将是一个迥殊很是消耗CPU的成就,由于全文检索是用不上一样寻常数据库的索引的,以是要截止响应字段记载遍历。关于全文索引可以参考一下基于Java的全文索引引擎lucene的引见。

        9.前台哄骗的记载缓存:比方一个屡屡哄骗数据库认证,假如需求有更新用户末尾登岸时候的操纵,最好记载更新后就把用户放到一个缓存中(设置2个小时后过期),这样假如用户在2个小时内再次哄骗到登岸,就直接从缓存里认证,戒备了过于频仍的数据库操纵。

        10.盘问优先的表应该尽年夜约为where和order by字句中的字段加上索引,数据库更新拔出优先的哄骗索引越少越好。

        总之:对于任何数据库单表记载超过100万条优化都是比力难题的,关键是要把哄骗可以转化成数据库比力擅长的数据下限内。也即是把巨年夜需求简化成比力成熟的解决方案内。

    一次优化实战

        以下例子是对一个论坛哄骗截止的优化:

        1.用Webalizer替代了本来的经由历程数据库的统计。

        2.首先经由历程TOP下令反省MySQL办事的CPU占用旁边80%和内存占用:10M,声名数据库的索引缓存已经用完了,删改启动参数,添加了-O key_buffer=32M,过一段时候等数据库安定后看的内存占用能否抵达下限。末尾将缓存赓续添加到64M,数据库缓存才根天分充分哄骗。对于一个数据库哄骗来说,把内存给数据库比给WEB办事虚用的多,由于MySQL盘问速度的提高能加快web哄骗从而节流并发的WEB办事所占用的内存资源。

        3.用show processlist;统计屡屡泛起的SQL:

        每分钟运转一次show processlist并记载日记:

        * * * * * (/home/mysql/bin/mysql -uuser -ppassword < /home/chedong/show_processlist.sql >> /home/chedong/mysql_processlist.log)

        show_processlist.sql里就一句:

        show processlist;

        比方可以从日记中将包括where的字句过滤出来:
        grep where mysql_processlist.log

        假如发明有去世锁,必然要从头审视一下数据库希图了,对于一样寻常景遇:盘问速度很慢,就将SQL where字句中没有索引的字段加上索引,假如是排序慢就将order by字句中没有索引的字段加上。对于有%like%的盘问,思索以后禁用和哄骗全文索引加速。

        4.仍是遵照show processlist;看屡屡有那些数据库被频仍哄骗,思索将数据库拆分到其他办事端口上。

        MSSQL到MySQL的数据迁徙:ACCESS+MySQL ODBC Driver

        在已往的频频数据迁徙理论历程中,我发明最轻便的数据迁徙历程并不是经由历程专业的数据库迁徙器材,也不是MSSQL本身的DTS截止数据迁徙(迁徙历程中央会有良多表犯错误正告),但经由历程将MSSQL数据库经由历程ACCESS获取内部数据导入到数据库中,然后用ACCESS的表==>右键==>导出,订定ODBC,经由历程MySQL的DSN将数据导出。这样迁徙年夜部门数据城市迥殊很是顺利,假如导出的表有索引标题,还会出添加索引提醒(DTS就不行),然后剩余的义务即是在MySQL中希图字段对应的SQL剧本了。




    版权声明: 原创作品,允许转载,转载时请务必以超链接情势标明文章 原始原由 、作者信息和本声明。不然将清查法律责任。

  • 相关阅读:
    如何处理消息堆积
    如何避免消息的重复发送
    内存泄漏和内存溢出的关系
    数据挖掘
    servlet
    数据驱动安全需三大核心新技术
    JS 入门经典 第三章 判断、循环和函数
    JS 高级程序设计 第三章
    JS入门经典
    JS高级程序设计1-2章
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975791.html
Copyright © 2020-2023  润新知