乡亲
我有一个4核的MySQL服务器,内存为4GB,包含19个MyISAM表(总计:~164 GB数据)和32个innodb表( 5mb ),我们使用它来处理CDR文件(基本上是调用详细记录文件)。
我有一张有大约2亿张唱片的桌子(Billing_datas)。(基本上,我们用载体等的id存储所有cdr文件数据),它继续以每月9000万行的速度增长。
我们需要根据选定的“日期从”和“日期到”标准生成报告。我对这种方法感到困惑。
当前的场景是,我们在主表(即billing_datas )上触发查询,并使用“日期从”和“日期到”参数创建临时表,并对这个临时表执行聚合计算。但是真正的性能冲击是创建临时表需要花费大约18秒的时间来保存一个月的记录。
发布于 2013-10-08 12:36:23
内存中临时表的最大大小。如果内存中的临时表超过限制,MySQL将自动将其转换为磁盘上的MyISAM表.如果您通过查询执行许多高级组,并且您有大量内存,则增加tmp_table_size的值(如果有必要的话增加max_heap_table_size )。此变量不适用于用户创建的内存表。
通过比较Created_tmp_disk_tables和Created_tmp_tables变量的值,可以将创建的内部磁盘临时表的数量与创建的内部临时表的总数进行比较。
tmp_table_size值调整最大值_堆_表格_大小此变量设置允许用户创建的内存表增长的最大大小。变量的值用于计算内存表MAX_ROWS值。设置此变量对任何现有内存表都没有影响,除非使用created或ALTER或TRUNCATE表等语句重新创建表。服务器重新启动还将现有内存表的最大大小设置为全局max_heap_table_size值。
此变量还与tmp_table_size一起使用,以限制内存内表的大小。
在设置适当的tmp_table_size和max_heap_table_size之后,重新启动服务器并尝试那些报告查询并观察性能。
请参考如何从这里优化Group By查询:
http://dev.mysql.com/doc/refman/5.0/en/group-by-optimization.html
https://dba.stackexchange.com/questions/51195
复制相似问题