Hi!

InnoDB is a MySQL table type which supports foreign keys, transactions, row
level locking, and a non-free online backup tool. InnoDB is included in all
MySQL-4.0 and
MySQL-4.1 downloads from http://www.mysql.com.

MySQL/InnoDB-4.0.14 is mainly a bugfix release of the stable 4.0 branch.

There are two new features, though:

- Transaction SAVEPOINT and ROLLBACK TO SAVEPOINT commands. See
  http://www.innodb.com/ibman.html#Savepoints
- Indexes on prefixes of columns, like in CREATE TABLE t (a BLOB, INDEX
(a(10))).

Of the bug fixes, we can note that SET FOREIGN_KEY_CHECKS=0 now replicates
properly in MySQL replication. Another important bug fix is that the data
page checksum formula is now corrected. Previously, most file corruption
caused by the operating system went unnoticed. It is recommended that InnoDB
Hot Backup users upgrade to >= ibbackup-1.40 when they upgrade to >=
MySQL-4.0.14.


The full changelog:

Functionality added or modified:

* InnoDB now supports the SAVEPOINT and ROLLBACK TO SAVEPOINT SQL
statements.

* 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.

* Corrected 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.


Bug fixes:

* Fixed a bug: SET FOREIGN_KEY_CHECKS=0 was not replicated properly in the
MySQL replication. The fix will probably 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
SELECTS 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.


Outstanding bugs:

MySQL/InnoDB-4.0.15, September x, 2003

* Fixed a bug: if you updated a row so that the 8000 byte maximum length
(without BLOB and TEXT) was exceeded, InnoDB simply removed the record from
the clustered index. In a similar insert, InnoDB would leak reserved file
space extents, which would only be freed at the next mysqld startup.

* Fixed a bug: if you used big BLOBs or TEXTs, and your log files were
relatively small, InnoDB could in a big BLOB operation temporarily write
over the log produced AFTER the latest checkpoint. If InnoDB would crash at
that moment, then the crash recovery would fail, because InnoDB would not be
able to scan the log even up to the latest checkpoint. Starting from this
version, InnoDB tries to ensure the latest checkpoint is young enough. If
that is not possible, InnoDB prints a warning to the .err log of MySQL and
advises you to make the log files bigger.

Best regards,

Heikki Tuuri
Innobase Oy
http://www.innodb.com



-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to