Bug #24052 | On Win64, MEMORY tables are limited to 4 GB | ||
---|---|---|---|
Submitted: | 7 Nov 2006 17:25 | Modified: | 18 Dec 2006 18:56 |
Reporter: | John David Duncan | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Memory storage engine | Severity: | S1 (Critical) |
Version: | 5.0.27/4.1:/5.1 | OS: | Windows (Windows 64) |
Assigned to: | Michael Widenius | CPU Architecture: | Any |
Tags: | backport_050030SP1, bfsm_2006_12_07 |
[7 Nov 2006 17:25]
John David Duncan
[7 Nov 2006 17:34]
MySQL Verification Team
Thank you for the bug report.
[7 Nov 2006 18:58]
John David Duncan
The fix I proposed will not work, according to this note I got from Igor Chernyshev: ------------------------------ Hi JD, I tried to change ulong myself, but that creates a true mess... MYSQL uses "unsigned long" and "ulong" interchangeably for defining the same functions or data. I can change "ulong", but cannot change "unsigned long". So I had to fix a bunch of header files from "unsigned long" to "ulong". However, even after that it was not stable - mysqladmin would crash, etc... I figured out that there are multiple places where we dereference pointers and compiler would not check that, or the places where we rely on SIZEOF_LONG definition. I also suspect that some of the printf formatting would break because it sees a wrong data size. Now that there was such a mess I did a simpler thing - I changed max_heap_table_size and tmp_table_size to be ulonglong, and changed all other "heap" structures along with that. It seems to work correctly. We should just remember that the table size includes both data and index structures. Thanks, Igor
[7 Nov 2006 19:07]
MySQL Verification Team
This fix will not work, because what is required is to check how did __int64 failed to be configured for ulong, long, ulonglong and longlong.
[18 Dec 2006 18:56]
Paul DuBois
Noted in 5.0.32, 5.1.14 changelogs. The size of MEMORY tables and internal temporary tables was limited to 4GB on 64-bit Windows systems.