在使用mysql是突然发现提醒mysql Copying to tmp table on disk 错误了,下面我们来看看此问题的解决办法.
经过查资料发现mysql可以通过变量tmp_table_size和max_heap_table_size来控制内存表大小上限,如果超过上限会将数据写到磁盘上,从而会有物理磁盘的读写操作,导致影响性能.
我们可以通过调整这两个变量的值来提升性能,当然前提条件是mysql所在服务器有足够的内存.
首先可以通过下面语句查看当前的变量值:
SHOW VARIABLES LIKE ‘max_heap_table_size%’;
然后通过SET GLOBAL max_heap_table_size=522715200; 设置变量值为512M,你可以根据自己的情况设置合适的值,tmp_table_size变量的设置方法一样.
SHOW VARIABLES LIKE ‘tmp_table_size’;
SET GLOBAL max_heap_table_size=512*1024*1024;
其次发现开发人员编写的语句,根本无法使用到缓存,这个sql优化是个长期的过程,代码如下:
- #Time:14090116:26:23
- #User@Host:wealth[wealth]@[172.20.1.70]
- #Query_time:2266.887211Lock_time:0.000196Rows_sent:17Rows_examined:71501657
- SETtimestamp=1409559983;
- SELECTa.Pid,count(a.id)ascount,p.ProductId,p.ProductName,p.ProductType,p.Profit,p.StartTime,p.EndTime,p.StartMoney,p.AddTime,i.IssuerNameFROM`Issuer`asi,`Count`asaleftjoinProductaspona.Pid=p.ProductIdWHEREa.Stime>‘time()–3600*24*30′andp.IssuerId=i.IssuerIdANDp.IsDel=0groupbya.Pidorderbycount(a.id)desclimit0,17;
- //开源代码phpfensi.com