InnoDB now supports the SAVEPOINT
and
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.
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.
In 4.0.13 we made SHOW INNODB STATUS
to
print detailed info on the latest UNIQUE
KEY
error, but storing that info could slow down
REPLACE
significantly. We no longer store
or print the info.
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
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: SET
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 AUTOCOMMIT=1
then
inside 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
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 VARCHAR
and 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
SELECT
coincided.
Fixed a possible hang over the btr0sea.c latch if
SELECT
was used inside LOCK
TABLES
.
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 DELETE
statement first managed to delete some rows and then failed
in a 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
INSERT
or SELECT
from
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.