|
smt.r_ap_temp表是内存表
insert into smt.r_ap_temp values ('12345656789','1234567989556fdfdfdfdfdfdfd','1234567989556fdfdfdf',
'1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf',
'1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf','1234567989556fdfdfdf',
'1234567989556fdfdfdf','1234567989556fdfdfdf',now());
对该表连续插入9310行后提示:
错误码: 1114
The table 'r_ap_temp' is full
当前的数据库参数:
show VARIABLES like '%table_size%';
max_heap_table_size=16777216=16M
tmp_table_size=31457280=30M
试验一: 不重启数据库的情况下,修改这两个参数值 ,对 已经存在的内存表不起作用
set global max_heap_table_size=167772160
set global tmp_table_size=314572800
select @@max_heap_table_size
select @@tmp_table_size
是的, 参数变大后, 依然无法插入!
试验二:接上面的情况, 临时修改参数后, 如果trunc表,是否会成效
truncate smt.r_ap_temp
证明一半对一半不对!
因为修改的是全局变量, 本地变量没有变, 如果在这个session情况下truncate表,再插入也只能插入9310
但如果是在一个新的SESSIOn中做的truncate表, 本地变量已经变了,这时可以插入更多的数据了
试验三:接上面的情况,这里如果重启了数据库
发现只能插入9310
试验四:只改max_heap_table_size(增大一倍), 不改tmp_table_size(不变)
可插入18620
试验五:不改tmax_heap_table_size(不变), 改tmp_table_size(小一半)
可以插入9310
试验六:不改tmax_heap_table_size(不变), 改tmp_table_size(小到10分之一)
也可以插入9310,为什么 ?????
试验七: 设置MAX_ROWS
ALTER TABLE smt.r_ap_temp MAX_ROWS=50000;
也可以插入9310,为什么 ?????
试验八:不改tmax_heap_table_size(不变), 改tmp_table_size(大10倍)
建立临时表, 无论插入多少,都不报错
结论:
1.内存表只受max_heap_table_size的影响
2.临时表超过大小也不会报错,只能转为本地数据
|
|