mariadb/mysql-test/t/variables-big.test
Jon Olav Hauglid c7581bb5a1 Bug#20730053: BACKPORT BUG#19770858 TO 5.1
Backport from mysql-5.5 to mysql-5.1 of:

Bug19770858: MYSQLD CAN BE DRIVEN TO OOM WITH TWO SIMPLE SESSION VARS

The problem was that the maximum value of the transaction_prealloc_size
session system variable was ULONG_MAX which meant that it was possible
to cause the server to allocate excessive amounts of memory.

This patch fixes the problem by reducing the maxmimum value of
transaction_prealloc_size and transaction_alloc_block_size down
to 128K.

Note that transactions will still be able to allocate more than
128K if needed, this patch just reduces the amount that can be
preallocated - as well as the maximum size of the incremental
allocation blocks.

(cherry picked from commit 540c9f7ebb428bbf9ec028feabe1f7f919fdefd9)

Conflicts:
	mysql-test/suite/sys_vars/r/transaction_alloc_block_size_basic.result
	mysql-test/suite/sys_vars/r/transaction_alloc_block_size_basic_64.result
	mysql-test/suite/sys_vars/t/disabled.def
	mysql-test/suite/sys_vars/t/transaction_alloc_block_size_basic.test
	sql/sys_vars.cc
2015-03-19 11:29:13 +01:00

54 lines
1.7 KiB
Text

#
# test variables big
#
--source include/big_test.inc
#
# Bug#27322 failure to allocate transaction_prealloc_size causes crash
#
#
# Manual (5.1):
# Platform Bit Size Range Default
# 32/64 1024-128k 4096
#
# Observation(mleich):
# 1. - Linux 64 Bit, MySQL 64 Bit, 4 GiB RAM, 8 GiB swap
# - SET SESSION transaction_prealloc_size=1099511627776;
# SHOW PROCESSLIST;
# Id User ... Info
# <Id> root ... SHOW PROCESSLIST
# SELECT @@session.transaction_prealloc_size;
# @@session.transaction_prealloc_size
# 1099511627776
# very short runtime in 5.0
# excessive resource consumption + long runtime in 5.1 and 6.0
# 2. - Win in VM, slightly older version of this test, MySQL 5.0
# - testcase timeout after 900s
# analyze-timeout-mysqld.1.err :
# Id User ... Time Info
# 83 root ... 542 set session transaction_prealloc_size=1024*1024*1024*2
# 84 root ... 1 SHOW PROCESSLIST
#
# There is a significant probablitity that this tests fails with testcase
# timeout if the testing box is not powerful enough.
#
--disable_warnings
SET SESSION transaction_prealloc_size=1024*1024*1024*1;
--replace_column 1 <Id> 3 <Host> 6 <Time>
SHOW PROCESSLIST;
SET SESSION transaction_prealloc_size=1024*1024*1024*2;
--replace_column 1 <Id> 3 <Host> 6 <Time>
SHOW PROCESSLIST;
SET SESSION transaction_prealloc_size=1024*1024*1024*3;
--replace_column 1 <Id> 3 <Host> 6 <Time>
SHOW PROCESSLIST;
SET SESSION transaction_prealloc_size=1024*1024*1024*4;
--replace_column 1 <Id> 3 <Host> 6 <Time>
SHOW PROCESSLIST;
SET SESSION transaction_prealloc_size=1024*1024*1024*5;
--replace_column 1 <Id> 3 <Host> 6 <Time>
SHOW PROCESSLIST;
--enable_warnings