可以用mysql内存表代替传统的表,根据并发测试,性能可以提高较多,查询由0.62s减少到0.18s,而且每个session的结果集可以共享,避免了第一次的物理读,减少os io,
而且表的大小适合内存表的使用
1.建立内存表,如
CREATE TABLE `wdtmfw` (
`GS` mediumint(6) unsigned NOT NULL DEFAULT '0',
`QSH` bigint(13) NOT NULL DEFAULT '0',
`ZZH` bigint(13) NOT NULL DEFAULT '0',
`FPSJ` datetime NOT NULL DEFAULT '2007-01-01 00:00:00',
`lrsj` datetime NOT NULL DEFAULT '2007-01-01 00:00:00',
`lb` int(1) NOT NULL DEFAULT '1',
`bm` mediumint(7) unsigned NOT NULL DEFAULT '0',
`fpry` varchar(18) NOT NULL,
`ywy` mediumint(7) NOT NULL DEFAULT '0',
`xgbz` tinyint(4) DEFAULT '0',
PRIMARY KEY (`GS`,`QSH`,`ZZH`,`lb`,`bm`),
KEY `idx01_wdtmfw` (`QSH`,`ZZH`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8
其中内存表使用的内存大小由
max_heap_table_size控制,要却表该参数比表使用的空间大
2.关于重启后数据清空的解决方法
可以使用形如mv的方法,定时增量更新内存表,可以写过程+event scheduler来实现
过程如
begin
insert into wdtmfw_new select * from wdtmfw a on duplicate key update fpsj=a.fpsj,lrsj=a.lrsj,fpry=a.fpry,ywy=a.ywy,xgbz=a.xgbz;
end;
/
可以设置几秒同步一次,因为内存表所以比较,插入速度很快
3.测试报告(100,200,500,1000用户使用内存表并发查询)
Statistics for the Userload:
User Load TPS kBPS Avg. Response Time (sec) Avg. Transaction Time (sec) Total Executions Total Rows Total Errors
100 62.51 4.000 0.271 0.271 500 1000 0
Statistics for the Userload:
User Load TPS kBPS Avg. Response Time (sec) Avg. Transaction Time (sec) Total Executions Total Rows Total Errors
200 142.91 9.146 0.179 0.179 1000 2000 0
Statistics for the Userload:
User Load TPS kBPS Avg. Response Time (sec) Avg. Transaction Time (sec) Total Executions Total Rows Total Errors
500 128.32 8.212 1.311 1.311 2500 5000 0
Statistics for the Userload:
User Load TPS kBPS Avg. Response Time (sec) Avg. Transaction Time (sec) Total Executions Total Rows Total Errors
1000 142.88 9.145 3.065 3.065 5000 10000 0
阅读(6088) | 评论(0) | 转发(0) |