架构mysql——linux + linux +apache
在慢查询日志发现比较多的有3-4个表  
a 表 10万 b 表10万  c 20万  (去年年初的时候是3万不到 现在多了速度慢下来)另外这3个表还是复制表 。  (在线高并发, 这台机器和另外1台机器为复制环境)
太多的慢查询牵涉到这3个表。 已经索引优化 ,加了大量的临时表。万般无赖下,我开始考虑使用如下策略
a------分别建立对应的内存表a1
b------分别建立对应的内存表 b1
c ------分别建立对应的内存表c1delete  update insert 全部在 a b c 进行
select 全部在a1 b1 c1高并发环境没有办法 ,几乎把所有方法用过了,目前只能这样用
同意否(另外当前max-heap-size是1667 0000   请问我最大的内存表可以多大
系统究竟允许存在多少个内存表

解决方案 »

  1.   

    max-heap-size 应该是指单表容量的  假如当前max-heap-size是1667 0000  单表如何计算有多大
    假如最大表是50m, 问 系统最多允许存在多少个大小为50m的内存表 (当前内存是3g) 
      

  2.   

    max-heap-size是1667 0000 =15m算最大只能是2g   我打算这里配置1g 给这些内存表
      

  3.   

    20万记录就慢说明设计和SQL语句以及参数的问题都不少,应该还有很大的优化空间。
    先加大这几个参数试试
    #Temp table
    tmp_table_size=128M
    max_heap_table_size=128M
    max_tmp_tables=128
    以上参数值能支撑我们网站100多万记录的数据库,当然还有其他参数最重要的是设计,MySQL在不同硬件条件时能应对的数据量规模不同,不好的设计使系统很快就达到了环境的上限,如这个贴http://topic.csdn.net/u/20100325/10/801d54f6-121b-4431-873d-e061dc60c6a6.html的问题很明显就出在设计上
    SQL语句也是重中之重,实践中大部分性能问题就是不够巧妙的SQL语句造成的,如 select * from tab where field like '...%' limit m,n 之类的SQL语句
    第三就是分布式布署,比如您已经采用的“复制”,是很好的办法......等等
      

  4.   


    select * from tab where field like '...%' limit m,n 之这样的sql 如何优化改写??
      

  5.   

    select * from tab where field like '...%' limit m,n 这个语句解释 是走 索引 的select * from tab where left(field,2)='sa'  这个语句是不走索引 的 。  第三就是分布式布署  (当前我做的是15个表 的复制 发现在从机上执行 sql 比主机器 要慢很多 )
      

  6.   

    只能写成 select id from tab where field='...' limit m,n
    这个要从设计上避免,思路参照http://58.ebweek.com
      

  7.   


    检查从机的硬件(顺序:内存、硬盘、CPU)
    检查从机的损失操作系统(Linux or windows ,建议用CentOS5.4。能识别多大内存,硬盘分区合不合理等)
    检查从机的数据库分区文件系统(不要用Ext3、Ext4,建议使用ReiserFS、XFS、JFS等)
    检查从机的MySQL参数
    检查数据更新的SQL语句(如insert into、update tab等,尽量使用批量更新及延迟,如:insert DELAYED into tab(...) values(...),(...),(...),(...),......); LOCK TABLES tab1,tab2,... WRITE; update tab1 set col1=v1; ......如果问题依然存在,说明你目前的架构已经达到设计上限,必须重新设计系统了!
      

  8.   

    纠正输入误差:
    检查从机的操作系统(Linux or windows ,建议用CentOS5.4。能识别多大内存,硬盘分区合不合理等)
    LOCK TABLES tab1,tab2,... WRITE; update tab1 set col1=v1; ......; UNLOCK TABLES
      

  9.   

    既然你已经优化了索引,并且检索的时候使用索引,那就不需要扫描全表。
    你要注意一下服务器是cpu瓶颈还是IO瓶颈。如果是cpu瓶颈的话,内存表也很难解决问题。你可以把sql写出来,让大家帮你分析一下。
      

  10.   

     MySQL百万以上数据分页实例MySQL优化SQL语句
    最快和最少两个原则
    最快:
    1、使用主键作为条件
    2、使用唯一的索引作为条件
    3、使用整数(或时间)类型的索引作为条件
    4、使用定长的列索引作为条件
    最少:
    缩小查询范围
    用 select id 等代替 select *
    用查询先找出最少的主键:select id from my_tab order by id desc limit 0,100百万以上数据分页实例
    取总数: Select SQL_BUFFER_RESULT count(id) as all_ID from my_tab
    总页数: 总数/每页条数
    最后一页的条数: 总数%每页条数查询数据:
    select id,title,price from my_tab m INNER JOIN ( select id as my_id from ( select id from my_tab order by id desc limit 0,100 ) as tmp ) as temp ON my_id=id第一步、按照最快原则,以主键id作为条件排序 ( select id from my_tab order by id desc limit 0,100 ) as tmp第二步、按照最少原则,只取回当前所需的记录,而且只取id ( select id from my_tab order by id desc limit 0,100 ) as tmp第三步、按照最快原则,以主键id作为条件取回所需的信息 select id,title,price from my_tab m INNER JOIN ( ... ) as temp ON my_id=id