mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 19:41:47 +01:00
c7581bb5a1
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
54 lines
1.7 KiB
Text
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
|
|
|