mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug #36022 please log more information about "Sort aborted" queries
Write an additional warning message to the server log, explaining why a sort operation is aborted. The output in mysqld.err will look something like: 110127 15:07:54 [ERROR] mysqld: Sort aborted: Out of memory (Needed 24 bytes) 110127 15:07:54 [ERROR] mysqld: Out of sort memory, consider increasing server sort buffer size 110127 15:07:54 [ERROR] mysqld: Sort aborted: Out of sort memory, consider increasing server sort buffer size 110127 15:07:54 [ERROR] mysqld: Sort aborted: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1 If --log-warn=2 is enabled, we output information about host/user/query as well. include/my_sys.h: Update comment for ME_NOREFRESH mysql-test/include/mtr_warnings.sql: Remove global filtering of "Out of sort memory", let each individual test set it instead. mysql-test/r/filesort_debug.result: New test case. mysql-test/r/order_by.result: Ignore "Out of memory" for this test. mysql-test/t/filesort_debug.test: New test case. mysql-test/t/order_by.test: Ignore "Out of memory" for this test. sql/filesort.cc: Output an explanation using the error message from the THD Diagnostics_area. sql/protocol.cc: Do not DBUG_RETURN(function_call_with DBUG_RETURN) as it messes up the call stack in the debug output. sql/share/errmsg-utf8.txt: Change error message for "Out of sort memory" sql/unireg.h: Remove unused/confusing ERRMAPP macro.
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -104,7 +104,7 @@ typedef struct my_aio_result {
|
||||
#define ME_HOLDTANG 8 /* Don't delete last keys */
|
||||
#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */
|
||||
#define ME_WAITTANG 32 /* Wait for a user action */
|
||||
#define ME_NOREFRESH 64 /* Dont refresh screen */
|
||||
#define ME_NOREFRESH 64 /* Write the error message to error log */
|
||||
#define ME_NOINPUT 128 /* Dont use the input libary */
|
||||
#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */
|
||||
#define ME_COLOUR2 ((2 << ME_HIGHBYTE))
|
||||
|
@ -183,9 +183,6 @@ INSERT INTO global_suppressions VALUES
|
||||
("The slave I.O thread stops because a fatal error is encountered when it try to get the value of SERVER_ID variable from master."),
|
||||
(".SELECT UNIX_TIMESTAMP... failed on master, do not trust column Seconds_Behind_Master of SHOW SLAVE STATUS"),
|
||||
|
||||
/* Test case for Bug#31590 in order_by.test produces the following error */
|
||||
("Out of sort memory; increase server sort buffer size"),
|
||||
|
||||
/* Special case for Bug #26402 in show_check.test
|
||||
- Question marks are not valid file name parts on Windows. Ignore
|
||||
this error message.
|
||||
|
16
mysql-test/r/filesort_debug.result
Normal file
16
mysql-test/r/filesort_debug.result
Normal file
@ -0,0 +1,16 @@
|
||||
SET @old_debug= @@session.debug;
|
||||
#
|
||||
# Bug#36022 please log more information about "Sort aborted" queries
|
||||
#
|
||||
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
||||
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
||||
SET session debug= '+d,make_char_array_fail';
|
||||
CALL mtr.add_suppression("Out of sort memory");
|
||||
SELECT * FROM t1 ORDER BY f1 ASC, f0;
|
||||
ERROR HY001: Out of sort memory, consider increasing server sort buffer size
|
||||
SET session debug= @old_debug;
|
||||
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
||||
DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
|
||||
ERROR 42000: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1
|
||||
DROP TABLE t1;
|
||||
DROP FUNCTION f1;
|
@ -1425,8 +1425,9 @@ set session sort_buffer_size= 30000;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect sort_buffer_size value: '30000'
|
||||
set session max_sort_length= 2180;
|
||||
CALL mtr.add_suppression("Out of sort memory");
|
||||
select * from t1 order by b;
|
||||
ERROR HY001: Out of sort memory; increase server sort buffer size
|
||||
ERROR HY001: Out of sort memory, consider increasing server sort buffer size
|
||||
drop table t1;
|
||||
#
|
||||
# Bug #39844: Query Crash Mysql Server 5.0.67
|
||||
|
23
mysql-test/t/filesort_debug.test
Normal file
23
mysql-test/t/filesort_debug.test
Normal file
@ -0,0 +1,23 @@
|
||||
--source include/have_debug.inc
|
||||
|
||||
SET @old_debug= @@session.debug;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#36022 please log more information about "Sort aborted" queries
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
||||
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
||||
|
||||
SET session debug= '+d,make_char_array_fail';
|
||||
CALL mtr.add_suppression("Out of sort memory");
|
||||
--error ER_OUT_OF_SORTMEMORY
|
||||
SELECT * FROM t1 ORDER BY f1 ASC, f0;
|
||||
SET session debug= @old_debug;
|
||||
|
||||
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
||||
--error ER_SP_WRONG_NO_OF_ARGS
|
||||
DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP FUNCTION f1;
|
@ -843,7 +843,8 @@ create table t1(a int, b tinytext);
|
||||
insert into t1 values (1,2),(3,2);
|
||||
set session sort_buffer_size= 30000;
|
||||
set session max_sort_length= 2180;
|
||||
--error 1038
|
||||
CALL mtr.add_suppression("Out of sort memory");
|
||||
--error ER_OUT_OF_SORTMEMORY
|
||||
select * from t1 order by b;
|
||||
drop table t1;
|
||||
|
||||
|
@ -324,8 +324,24 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
||||
}
|
||||
}
|
||||
if (error)
|
||||
my_message(ER_FILSORT_ABORT, ER(ER_FILSORT_ABORT),
|
||||
MYF(ME_ERROR+ME_WAITTANG));
|
||||
{
|
||||
DBUG_ASSERT(thd->is_error());
|
||||
my_printf_error(ER_FILSORT_ABORT,
|
||||
"%s: %s",
|
||||
MYF(ME_ERROR + ME_WAITTANG),
|
||||
ER_THD(thd, ER_FILSORT_ABORT),
|
||||
thd->stmt_da->message());
|
||||
|
||||
if (global_system_variables.log_warnings > 1)
|
||||
{
|
||||
sql_print_warning("%s, host: %s, user: %s, thread: %lu, query: %-.4096s",
|
||||
ER_THD(thd, ER_FILSORT_ABORT),
|
||||
thd->security_ctx->host_or_ip,
|
||||
&thd->security_ctx->priv_user[0],
|
||||
(ulong) thd->thread_id,
|
||||
thd->query());
|
||||
}
|
||||
}
|
||||
else
|
||||
statistic_add(thd->status_var.filesort_rows,
|
||||
(ulong) records, &LOCK_status);
|
||||
@ -369,6 +385,9 @@ static char **make_char_array(char **old_pos, register uint fields,
|
||||
char *char_pos;
|
||||
DBUG_ENTER("make_char_array");
|
||||
|
||||
DBUG_EXECUTE_IF("make_char_array_fail",
|
||||
DBUG_SET("+d,simulate_out_of_memory"););
|
||||
|
||||
if (old_pos ||
|
||||
(old_pos= (char**) my_malloc((uint) fields*(length+sizeof(char*)),
|
||||
my_flag)))
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 2000, 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
/* Copyright (c) 2000, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -543,9 +543,10 @@ bool Protocol::send_ok(uint server_status, uint statement_warn_count,
|
||||
const char *message)
|
||||
{
|
||||
DBUG_ENTER("Protocol::send_ok");
|
||||
|
||||
DBUG_RETURN(net_send_ok(thd, server_status, statement_warn_count,
|
||||
affected_rows, last_insert_id, message));
|
||||
const bool retval=
|
||||
net_send_ok(thd, server_status, statement_warn_count,
|
||||
affected_rows, last_insert_id, message);
|
||||
DBUG_RETURN(retval);
|
||||
}
|
||||
|
||||
|
||||
@ -558,8 +559,8 @@ bool Protocol::send_ok(uint server_status, uint statement_warn_count,
|
||||
bool Protocol::send_eof(uint server_status, uint statement_warn_count)
|
||||
{
|
||||
DBUG_ENTER("Protocol::send_eof");
|
||||
|
||||
DBUG_RETURN(net_send_eof(thd, server_status, statement_warn_count));
|
||||
const bool retval= net_send_eof(thd, server_status, statement_warn_count);
|
||||
DBUG_RETURN(retval);
|
||||
}
|
||||
|
||||
|
||||
@ -573,8 +574,8 @@ bool Protocol::send_error(uint sql_errno, const char *err_msg,
|
||||
const char *sql_state)
|
||||
{
|
||||
DBUG_ENTER("Protocol::send_error");
|
||||
|
||||
DBUG_RETURN(net_send_error_packet(thd, sql_errno, err_msg, sql_state));
|
||||
const bool retval= net_send_error_packet(thd, sql_errno, err_msg, sql_state);
|
||||
DBUG_RETURN(retval);
|
||||
}
|
||||
|
||||
|
||||
|
@ -897,7 +897,7 @@ ER_OUT_OF_SORTMEMORY HY001 S1001
|
||||
cze "M-Bálo paměti pro třídění. Zvyšte velikost třídícího bufferu"
|
||||
dan "Ikke mere sorteringshukommelse. Øg sorteringshukommelse (sort buffer size) for serveren"
|
||||
nla "Geen geheugen om te sorteren. Verhoog de server sort buffer size"
|
||||
eng "Out of sort memory; increase server sort buffer size"
|
||||
eng "Out of sort memory, consider increasing server sort buffer size"
|
||||
jps "Out of sort memory. sort buffer size が足りないようです.",
|
||||
est "Mälu sai sorteerimisel otsa. Suurenda MySQL-i sorteerimispuhvrit"
|
||||
fre "Manque de mémoire pour le tri. Augmentez-la."
|
||||
@ -907,10 +907,10 @@ ER_OUT_OF_SORTMEMORY HY001 S1001
|
||||
ita "Memoria per gli ordinamenti esaurita. Incrementare il 'sort_buffer' al demone"
|
||||
jpn "Out of sort memory. sort buffer size が足りないようです."
|
||||
kor "Out of sort memory. daemon sort buffer의 크기를 증가시키세요"
|
||||
nor "Ikke mer sorteringsminne. Øk sorteringsminnet (sort buffer size) for tjenesten"
|
||||
norwegian-ny "Ikkje meir sorteringsminne. Auk sorteringsminnet (sorteringsbffer storleik) for tenesten"
|
||||
nor "Ikke mer sorteringsminne. Vurder å øke sorteringsminnet (sort buffer size) for tjenesten"
|
||||
norwegian-ny "Ikkje meir sorteringsminne. Vurder å auke sorteringsminnet (sorteringsbuffer storleik) for tenesten"
|
||||
pol "Zbyt mało pamięci dla sortowania. Zwiększ wielko?ć bufora demona dla sortowania"
|
||||
por "Sem memória para ordenação. Aumente tamanho do 'buffer' de ordenação"
|
||||
por "Não há memória suficiente para ordenação. Considere aumentar o tamanho do retentor (buffer) de ordenação."
|
||||
rum "Out of memory pentru sortare. Largeste marimea buffer-ului pentru sortare in daemon (sort buffer size)"
|
||||
rus "Недостаточно памяти для сортировки. Увеличьте размер буфера сортировки на сервере"
|
||||
serbian "Nema memorije za sortiranje. Povećajte veličinu sort buffer-a MySQL server-u"
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef UNIREG_INCLUDED
|
||||
#define UNIREG_INCLUDED
|
||||
|
||||
/* Copyright (C) 2000-2006 MySQL AB
|
||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -56,8 +56,6 @@ typedef struct st_ha_create_information HA_CREATE_INFO;
|
||||
#define ER_THD_OR_DEFAULT(thd,X) ((thd) ? ER_THD(thd, X) : ER_DEFAULT(X))
|
||||
|
||||
|
||||
#define ERRMAPP 1 /* Errormap f|r my_error */
|
||||
|
||||
#define ME_INFO (ME_HOLDTANG+ME_OLDWIN+ME_NOREFRESH)
|
||||
#define ME_ERROR (ME_BELL+ME_OLDWIN+ME_NOREFRESH)
|
||||
#define MYF_RW MYF(MY_WME+MY_NABP) /* Vid my_read & my_write */
|
||||
|
Reference in New Issue
Block a user