InnoDB now supports the
ROLLBACK TO SAVEPOINT SQL statements. See
http://www.innodb.com/ibman.php#Savepoints for the syntax.
You can now create column prefix keys like in
CREATE TABLE t (a BLOB, INDEX (a(10))).
You can also use
O_DIRECT as the
innodb_flush_method on the latest
versions of Linux and FreeBSD. Beware of possible bugs in
those operating systems, though.
Fixed the checksum calculation of data pages. Previously most OS file system corruption went unnoticed. Note that if you downgrade from version >= 4.0.14 to an earlier version < 4.0.14 then in the first startup(s) InnoDB will print warnings:
InnoDB: Warning: an inconsistent page in the doublewrite buffer InnoDB: space id 2552202359 page number 8245, 127'th page in dblwr buf.
Modified the buffer pool replacement algorithm so that it tries to flush modified pages if there are no replaceable pages in the last 10 % of the LRU list. This can reduce disk i/o if the workload is a mixture of reads and writes.
The buffer pool checkpoint flush algorithm now tries to flush also close neighbors of the page at the end of the flush list. This can speed up database shutdown, and can also speed up disk writes if InnoDB log files are very small compared to the buffer pool size.
In 4.0.13 we made
SHOW INNODB STATUS to
print detailed info on the latest
KEY error, but storing that info could slow down
REPLACE significantly. We no longer store
or print the info.
Fixed a bug :
was not replicated properly in the MySQL replication. The
fix will not be backported to 3.23.
Fixed a bug : the parameter
innodb_max_dirty_pages_pct forgot to take
into account the free pages in the buffer pool. This could
lead to excessive flushing even though there were lots of
free pages in the buffer pool. Workaround:
GLOBAL innodb_max_dirty_pages_pct = 100.
Fixed a bug : if there were big index scans then a file read request could starve and InnoDB could assert because of a very long semaphore wait.
Fixed a bug : if
LOCK TABLES MySQL failed to do the
commit after an updating SQL statement if binlogging was not
on, and for
SELECT statements did not
commit regardless of binlogging state.
Fixed a bug : InnoDB could make the index page directory
corrupt in the first
B-tree page splits
after a mysqld startup. A symptom would be an assertion in
page0page.c, in function page_dir_find_slot().
Fixed a bug : if in a
FOREIGN KEY with
UPDATE CASCADE clause the parent
column was of a different internal storage length than the
child column, then a cascaded update would make the column
length wrong in the child table and corrupt the child table.
Because of MySQL's 'silent column specification changes' a
CHAR column can change
internally to a
VARCHAR and cause this
Fixed a bug : if a non-
set was used and if in a
FOREIGN KEY the
parent column was of a different internal storage length
than the child column, then all inserts to the child table
would fail in a foreign key error.
Fixed a bug : InnoDB could complain that it cannot find the
clustered index record, or in rare cases return an
extraneous row if a rollback, purge, and a
Fixed a possible hang over the btr0sea.c latch if
SELECT was used inside
Fixed a bug : contrary to what the release note of 4.0.13 said, the group commit still did not work if the MySQL binlogging was on.
Fixed a bug : os_event_wait() did not work properly in Unix, which might have caused starvation in various log operations.
Fixed a bug : if a single
statement first managed to delete some rows and then failed
FOREIGN KEY error or a 'Table is
full error', MySQL did not roll back the whole SQL statement
as it should, and also wrote the failed statement to the
binlog, reporting there a non-zero error_code.
Fixed a bug : the maximum allowed number of columns in a
table is 1000, but InnoDB did not check that limit in
CREATE TABLE, and a subsequent
that table could cause an assertion.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.