InnoDB now supports the
SAVEPOINT SQL statements. For the syntax, see
Section 12.3.4, “SAVEPOINT and ROLLBACK TO SAVEPOINT Syntax”, and Section 12.3.1, “START TRANSACTION, COMMIT, and ROLLBACK Syntax”.
You can now create column prefix keys like in
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 or up to a version earlier than
InnoDB prints warnings in the first
InnoDB: Warning: An inconsistent page in the doublewrite buffer InnoDB: space id 2552202359 page number 8245, 127'th page in dblwr buf.
but that is not dangerous and can be ignored.
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.
Fixed a bug:
SET foreign_key_checks = 0 was
not replicated properly in the MySQL replication. The fix will
not be backported to 3.23.
Fixed a bug: the parameter
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:
SET GLOBAL innodb_max_dirty_pages_pct =
Fixed a bug: If there were big index scans then a file read
request could starve and
assert because of a very long semaphore wait.
Fixed a bug: If
1 then inside
TABLES MySQL failed to do the commit after an
updating SQL statement if binary logging was not on, and for
SELECT statements did not
commit regardless of binary logging 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 an
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 fixed-length
CHAR column can change
internally to a
cause this error.
Fixed a bug: If a non-
latin1 character 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 bug: contrary to what the release note of 4.0.13 said, the group commit still did not work if the MySQL binary logging 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 in
FOREIGN KEY error or a
full error, MySQL did not roll back the whole SQL
statement as it should, and also wrote the failed statement to
the binary log, reporting there a nonzero error_code.
Fixed a bug: the maximum permitted number of columns in a
table is 1000, but
InnoDB did not check
that limit in
CREATE TABLE, and
SELECT from that table could
cause an assertion.