Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.0.24, 10.1.16, 5.5(EOL), 10.0(EOL), 10.1(EOL)
-
None
-
Linux x64, Win32
Description
When doing a "REPLACE INTO table SELECT * FROM..." or "LOAD DATA INFILE ... REPLACE..." on a Aria table with a "text" (or tinytext, mediumtext, longtext) field, replacing data already in the table, used memory increases each time of about the size of data inserted, until server crash with error 1041.
The problem doesn't occours if matching records are deleted before.
Tested also with MyISAM and TokuDB, with which there are no problems.
Attachments
- h3088ato2 _2016-08-19_12-11-49.png
- 41 kB
- Risato Stefano
- my.cnf
- 5 kB
- Risato Stefano
- my.ini
- 21 kB
- Risato Stefano
Issue Links
- relates to
-
MDEV-13748 Assertion `status_var.local_memory_used == 0 || !debug_assert_on_not_freed_memory' failed in virtual THD::~THD after query with INTERSECT
-
- Closed
-
Activity
Maybe the problem occours dependently on the row size. I wrote a stored proc to reproduce the bug. This doesn't occours if you change the second field in the create table statement from TEXT to VARCHAR(4), or if you remove any other field. The three resultsets show the increasing usage of memory after repeated replace intos. I attach the windows my.ini and linux my.cnf files.
Stored procedure content:
BEGIN
|
|
declare i int; |
|
drop table if exists eneltel_info; |
CREATE TABLE `eneltel_info` ( |
`P3` MEDIUMINT(9) NOT NULL DEFAULT '0', |
`CODICE_ZONA` TEXT NOT NULL DEFAULT '', |
`CFT` CHAR(3) NOT NULL DEFAULT '', |
`ENELTEL` CHAR(9) NOT NULL DEFAULT '', |
`CODICE_PRESA` VARCHAR(13) NOT NULL DEFAULT '', |
`FLAG_TG` VARCHAR(255) NOT NULL DEFAULT '', |
`CODICE_GRUPPO` VARCHAR(255) NOT NULL DEFAULT '', |
`DATA_INSERIMENTO` DATETIME NULL DEFAULT NULL, |
`DATA_MODIFICA` DATETIME NULL DEFAULT NULL, |
`TARIFFARIO` VARCHAR(255) NOT NULL DEFAULT '', |
`CODICE_MIS` VARCHAR(255) NOT NULL DEFAULT '', |
`MATRICOLA_MIS` VARCHAR(255) NOT NULL DEFAULT '', |
`NOMINATIVO` VARCHAR(35) NOT NULL DEFAULT '', |
`VIA` VARCHAR(255) NOT NULL DEFAULT '', |
`NUM_CIV` VARCHAR(255) NOT NULL DEFAULT '', |
`RAPP_1` DECIMAL(5,0) NULL DEFAULT NULL, |
`RAPP_2` DECIMAL(3,0) NULL DEFAULT NULL, |
`STATO_PRESA` VARCHAR(255) NOT NULL DEFAULT '', |
`SOTTOSTATO_PRESA` VARCHAR(255) NOT NULL DEFAULT '', |
`CD_CL_MERCEOLOGICA` DECIMAL(3,0) NULL DEFAULT NULL, |
`POT_DISP` DECIMAL(7,1) NULL DEFAULT NULL, |
`SOM_POT` DECIMAL(7,3) NULL DEFAULT NULL, |
`COST_E` DECIMAL(12,5) NULL DEFAULT NULL, |
`COST_P` DECIMAL(12,3) NULL DEFAULT NULL, |
`DT_CONTRATTO` DATETIME NULL DEFAULT NULL, |
`DT_ALLACCIAMENTO` DATETIME NULL DEFAULT NULL, |
`FLAG_MIS_POT` VARCHAR(255) NOT NULL DEFAULT '', |
`TENSIONE` DECIMAL(6,0) NULL DEFAULT NULL, |
`TENS_FOR` VARCHAR(255) NOT NULL DEFAULT '', |
`FONDO_SCALA` VARCHAR(255) NOT NULL DEFAULT '', |
`MATR_1_TA` VARCHAR(255) NOT NULL DEFAULT '', |
`MATR_2_TA` VARCHAR(255) NOT NULL DEFAULT '', |
`MATR_3_TA` VARCHAR(255) NOT NULL DEFAULT '', |
`MATR_4_TA` VARCHAR(255) NOT NULL DEFAULT '', |
`TIPO_MIS` VARCHAR(255) NOT NULL DEFAULT '', |
`SISTEMA` VARCHAR(255) NOT NULL DEFAULT '', |
`POD` VARCHAR(15) NOT NULL DEFAULT '', |
`COD_TRADER` VARCHAR(255) NOT NULL DEFAULT '', |
`DESC_TRADER` VARCHAR(255) NOT NULL DEFAULT '', |
`SCALA` VARCHAR(255) NOT NULL DEFAULT '', |
`PIANO` VARCHAR(255) NOT NULL DEFAULT '', |
`INTERNO` VARCHAR(255) NOT NULL DEFAULT '', |
`CAP` VARCHAR(255) NOT NULL DEFAULT '', |
`LOCALITA` VARCHAR(25) NOT NULL DEFAULT '', |
`NUM_TEL1` VARCHAR(255) NOT NULL DEFAULT '', |
`NOTE_ACCESSO` VARCHAR(255) NOT NULL DEFAULT '', |
`CODICE_FISCALE` VARCHAR(16) NOT NULL DEFAULT '', |
`PARTITA_IVA` VARCHAR(11) NOT NULL DEFAULT '', |
`COD_U` CHAR(1) NOT NULL DEFAULT '', |
`DT_CES_CONTRATTO` DATETIME NULL DEFAULT NULL, |
`ID_PUNTO_MISURA_RRE` DECIMAL(11,0) NULL DEFAULT NULL, |
`ID_PUNTO_MISURA_LCO` DECIMAL(11,0) NULL DEFAULT NULL, |
`ID_PUNTO_MISURA_2` DECIMAL(11,0) NULL DEFAULT NULL, |
`NU_CIF_A` DECIMAL(1,0) NULL DEFAULT NULL, |
`COD_MAT_A` VARCHAR(255) NOT NULL DEFAULT '', |
`CODICE_MIS_R` VARCHAR(255) NOT NULL DEFAULT '', |
`MATRICOLA_MIS_R` VARCHAR(255) NOT NULL DEFAULT '', |
`NU_CIF_R` DECIMAL(1,0) NULL DEFAULT NULL, |
`COD_MAT_R` VARCHAR(255) NOT NULL DEFAULT '', |
`CODICE_MIS_P` VARCHAR(255) NOT NULL DEFAULT '', |
`MATRICOLA_MIS_P` VARCHAR(255) NOT NULL DEFAULT '', |
`NU_CIF_P` DECIMAL(1,0) NULL DEFAULT NULL, |
`COD_MAT_P` VARCHAR(255) NOT NULL DEFAULT '', |
`GESTORE_RETE` VARCHAR(255) NOT NULL DEFAULT '', |
`FORNITURA_RFI` VARCHAR(255) NOT NULL DEFAULT '', |
`POTENZA_FRANCHIGIA` DECIMAL(9,2) NULL DEFAULT NULL, |
`POT_CONTR_IMPEGNATA` DECIMAL(15,2) NULL DEFAULT NULL, |
`FRAZIONE` VARCHAR(255) NOT NULL DEFAULT '', |
`PROVINCIA` VARCHAR(255) NOT NULL DEFAULT '', |
`NAZIONE` VARCHAR(255) NOT NULL DEFAULT '', |
`TIPO_FORN` VARCHAR(255) NOT NULL DEFAULT '', |
`ID_TIPO_CONTR` VARCHAR(255) NOT NULL DEFAULT '', |
`CONTR_DISPAC` VARCHAR(255) NOT NULL DEFAULT '', |
`DT_FIRMA_CONTR_COMMITT` DATETIME NULL DEFAULT NULL, |
`DT_FIRMA_CONTR_CONTRAE` DATETIME NULL DEFAULT NULL, |
`VIA_ESAZ` VARCHAR(255) NOT NULL DEFAULT '', |
`NUMERO_CIVICO_ESAZ` VARCHAR(255) NOT NULL DEFAULT '', |
`CAP_ESAZ` VARCHAR(255) NOT NULL DEFAULT '', |
`COMUNE_ESAZ` VARCHAR(255) NOT NULL DEFAULT '', |
`FRAZIONE_ESAZ` VARCHAR(255) NOT NULL DEFAULT '', |
`PROVINCIA_ESAZ` VARCHAR(255) NOT NULL DEFAULT '', |
`NAZIONE_ESAZ` VARCHAR(255) NOT NULL DEFAULT '', |
`GEST_RETE_CONNES_SITO` VARCHAR(255) NOT NULL DEFAULT '', |
`PRODUTTORE` VARCHAR(255) NOT NULL DEFAULT '', |
`NON_DISALIMENTABILE` VARCHAR(256) NOT NULL DEFAULT '', |
`PATTI_SPECIALI` VARCHAR(255) NOT NULL DEFAULT '', |
`UBICAZ_APPARECCHI` VARCHAR(255) NOT NULL DEFAULT '', |
`LIMITATORE` VARCHAR(255) NOT NULL DEFAULT '', |
`PORTATA` VARCHAR(255) NOT NULL DEFAULT '', |
`FLAG_MISURA_ENERGIA_ATTIVA` VARCHAR(255) NOT NULL DEFAULT '', |
`FLAG_MISURA_ENERGIA_REATTIVA` VARCHAR(255) NOT NULL DEFAULT '', |
`CIFRE_ATTIVA` DECIMAL(2,0) NULL DEFAULT NULL, |
`CIFRE_REATTIVA` DECIMAL(2,0) NULL DEFAULT NULL, |
`CIFRE_POTENZA` DECIMAL(2,0) NULL DEFAULT NULL, |
`FORNTURE_ORARIE` VARCHAR(255) NOT NULL DEFAULT '', |
`FLAG_FITT` VARCHAR(255) NOT NULL DEFAULT '', |
`TIPO_RIPROGR` DECIMAL(1,0) NULL DEFAULT NULL, |
`TIPO_ALIM_CONTRAT` VARCHAR(255) NOT NULL DEFAULT '', |
`TIPO_MIS_POT` DECIMAL(2,0) NULL DEFAULT NULL, |
`CURVE_CARICO` VARCHAR(255) NOT NULL DEFAULT '', |
`ORE_UTLIZZO` DECIMAL(13,0) NULL DEFAULT NULL, |
`MAGG_PRELIEVI_TENS` DECIMAL(13,0) NULL DEFAULT NULL, |
`COMPONENTE_AUC` VARCHAR(255) NOT NULL DEFAULT '', |
`TIPO_UTENTE` VARCHAR(255) NOT NULL DEFAULT '', |
PRIMARY KEY (`P3`, `ENELTEL`) |
) ENGINE=Aria
|
COLLATE='latin1_swedish_ci' |
ROW_FORMAT=DYNAMIC; |
|
|
drop table if exists test; |
create table test like eneltel_info; |
|
set i=0; |
while i < 10000 do
|
replace into test (p3,eneltel) values (1,i); |
set i=i+1; |
end while; |
|
show global status like 'Memory_used'; |
|
set i=0; |
while i < 10000 do
|
replace into test (p3,eneltel) values (1,i); |
set i=i+1; |
end while; |
|
show global status like 'Memory_used'; |
|
set i=0; |
while i < 10000 do
|
replace into test (p3,eneltel) values (1,i); |
set i=i+1; |
end while; |
|
show global status like 'Memory_used'; |
|
END |
Thanks for the report and test case.
Reproducible with current 5.5-10.2.
10.1 also produces the assertion failure upon shutdown:
...
|
Warning: 16496 bytes lost at 0x7f5c6620d070, allocated by T@3 at maria/ma_dynrec.c:291, maria/ma_update.c:159, maria/ha_maria.cc:2310, sql/handler.cc:5914, sql/sql_insert.c
|
c:1825, sql/sql_insert.cc:991, sql/sql_parse.cc:3896, sql/sp_head.cc:3215
|
Warning: 16496 bytes lost at 0x7f5c661e8070, allocated by T@3 at maria/ma_dynrec.c:291, maria/ma_update.c:159, maria/ha_maria.cc:2310, sql/handler.cc:5914, sql/sql_insert.c
|
c:1825, sql/sql_insert.cc:991, sql/sql_parse.cc:3896, sql/sp_head.cc:3215
|
Memory lost: 3299200 bytes in 1384 chunks
|
mysqld: /data/src/10.1/sql/sql_class.cc:1709: virtual THD::~THD(): Assertion `status_var.local_memory_used == 0' failed.
|
160826 21:04:59 [ERROR] mysqld got signal 6 ;
|
This could be because you hit a bug. It is also possible that this binary
|
...
|
#7 0x00007f5c92f03312 in __GI___assert_fail (assertion=0x7f5c960159c0 "status_var.local_memory_used == 0", file=0x7f5c96015730 "/data/src/10.1/sql/sql_class.cc", line=1709, function=0x7f5c960170b0 <THD::~THD()::__PRETTY_FUNCTION__> "virtual THD::~THD()") at assert.c:101
|
#8 0x00007f5c956c75ff in THD::~THD (this=0x7f5c6f356070, __in_chrg=<optimized out>) at /data/src/10.1/sql/sql_class.cc:1709
|
#9 0x00007f5c956c77ac in THD::~THD (this=0x7f5c6f356070, __in_chrg=<optimized out>) at /data/src/10.1/sql/sql_class.cc:1714
|
#10 0x00007f5c9563c707 in unlink_thd (thd=0x7f5c6f356070) at /data/src/10.1/sql/mysqld.cc:2912
|
#11 0x00007f5c9563ca6a in one_thread_per_connection_end (thd=0x7f5c6f356070, put_in_cache=true) at /data/src/10.1/sql/mysqld.cc:3025
|
#12 0x00007f5c95839f6a in do_handle_one_connection (thd_arg=0x7f5c6f356070) at /data/src/10.1/sql/sql_connect.cc:1369
|
#13 0x00007f5c95839ba9 in handle_one_connection (arg=0x7f5c6f356070) at /data/src/10.1/sql/sql_connect.cc:1262
|
#14 0x00007f5c94e050a4 in start_thread (arg=0x7f5c9663bb00) at pthread_create.c:309
|
#15 0x00007f5c92fbd87d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
|
Still reproducible (10.1 312de43f40e221096b556)
Memory lost: 768 bytes in 3701 chunks
|
mysqld: 10.1/sql/sql_class.cc:1608: virtual THD::~THD(): Assertion `status_var.local_memory_used == 0' failed.
|
180718 21:25:05 [ERROR] mysqld got signal 6 ;
|
|
Server version: 10.1.35-MariaDB-debug
|
|
stack_bottom = 0x7f107e1bd100 thread_stack 0x48400
|
mysys/stacktrace.c:267(my_print_stacktrace)[0x55e6a2426454]
|
sql/signal_handler.cc:168(handle_fatal_signal)[0x55e6a1dbf3dd]
|
/lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7f107d291390]
|
linux/raise.c:54(__GI_raise)[0x7f107c860428]
|
stdlib/abort.c:91(__GI_abort)[0x7f107c86202a]
|
assert/assert.c:92(__assert_fail_base)[0x7f107c858bd7]
|
/lib/x86_64-linux-gnu/libc.so.6(+0x2dc82)[0x7f107c858c82]
|
sql/sql_class.cc:1610(THD::~THD())[0x55e6a1b3e217]
|
sql/sql_class.cc:1613(THD::~THD())[0x55e6a1b3e3c4]
|
sql/mysqld.cc:2840(unlink_thd(THD*))[0x55e6a1ab1daa]
|
sql/mysqld.cc:2954(one_thread_per_connection_end(THD*, bool))[0x55e6a1ab210e]
|
sql/sql_connect.cc:1349(do_handle_one_connection(THD*))[0x55e6a1cb67f7]
|
sql/sql_connect.cc:1243(handle_one_connection)[0x55e6a1cb6448]
|
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba)[0x7f107d2876ba]
|
x86_64/clone.S:111(clone)[0x7f107c93241d]
|
It seems to have disappeared from current 10.1/10.2, need to bisect to find out when/why.
The failure disappeared from 5.5 branch after this commit:
commit 2709380587bbcbc7abda77f11ee0abd207c65027
|
Author: Sergei Golubchik <serg@mariadb.org>
|
Date: Wed Feb 14 18:14:24 2018 +0100
|
|
MDEV-13748 Assertion `status_var.local_memory_used == 0 || !debug_assert_on_not_freed_memory' failed in virtual THD::~THD after query with INTERSECT
|
|
my_safe_alloca()/my_safe_afree() work as alloca() or malloc()/free()
|
depending on the memory size to allocate, that is, depending on
|
reclength here. They only work correctly if reclength doesn't
|
Couldn't reproduce it right away, but there are too many variables.
Could you please paste the exact SHOW CREATE TABLE from your scenario, specify how many rows (approximately) you replace by one query, and attach your cnf file(s)?