Change History

Kevin Crane edited this page Feb 19, 2015 · 52 revisions

Changes in Twitter MySQL 5.5.42.t19 (19 February 2015)

Upstream Merges

Changes in Twitter MySQL 5.5.40.t18 (7 November 2014)

Upstream Merges

Changes in Twitter MySQL 5.5.39.t17 (21 August 2014)

Upstream Merges

Functionality Added

  • Added @@master_server_id system variable

master_server_id is a system variable. Its default value is 0. When a slave connects to master, its value change to master's server id. When RESET SLAVE ALL is called, the value is reset to 0. RESET SLAVE and STOP SLAVE cannot reset its value. See rpl_master_server_id.test for more details.

  • Increase maximum user name length to 32 characters

User name length has been increased from 16 to 32 characters wherever applicable.

Changes in Twitter MySQL 5.5.37.t16 (6 May 2014)

Upstream Merges

Bugs Fixed

  • Fixed issue with duplicate unique indices in production.

Changes in Twitter MySQL 5.5.35.t15 (15 April 2014)

Functionality Added

  • Added option to disable deadlock detection

Deadlock detection code can be performance critical under heavily concurrent workload. Add an option innodb_deadlock_check (default ON as current behaviour).

  • Write query throttling and general query throttling

To avoid backing up of backlogs inside innodb concurrency queue, we have to throttle threads executing queries at MySQL query level. A new option twitter_query_throttling_limit [0,10000] is added as tunable parameter. A new error ER_QUERY_THROTTLED is thrown if running threads exceed twitter_query_throttling_limit. Additionally, we may want to throttle concurrent writes only. A new option twitter_write_throttling_limit [0, 5000] is added as configurable to control how many writes allowed in mysql server. Four new status variables are added to monitor workload, Read_queries, Write_queries, Total_queries_rejected, Write_queries_rejected, in addition to Write_queries_running.

Changes in Twitter MySQL 5.5.35.t14.1 (19 March 2014)

Bugs Fixed

  • Server crash in Percona userstat

This change fixes a NULL pointer reference in Percona userstat code.

Changes in Twitter MySQL 5.5.35.t14 (6 February 2014)

Beginning with Twitter MySQL 5.5.35.t14, we enable SSL support with the system OpenSSL library.

Functionality Added

  • User statistics

This change ports Percona's userstat patch that include user statistics, table statistics, index statistics, thread statistics, and client statistics. All are accessible as information schema tables.

  • Extend Twitter query statistics with row operations

This change adds rows_sent and rows_examined to Twitter query statistics.

  • Add user@host annotation to binlog event metadata

This change adds a new system variable binlog_write_user_info control whether user@host annotation is written to binlog. This functionality is intended for use by mysqlbinlog on MySQL slaves.

  • Expose max number of concurrently running threads

This change adds a new status variable Thread_running_max that tracks the max number of running threads since last execution of SHOW STATUS. It complements status variable Thread_running in capturing dynamic workload.

  • Expose the number of insert/upsert that are no-op

This changes adds a new status variable com_insert_noop that tracks the number of insert/upsert statements that does not insert or update any row.

Bugs Fixed

This change throws a warning for ALTER TABLE statements that attempt to modify a primary key column to nullable.

  • Server crash in Twitter audit logging mode

This change fixes Twitter audit logging code that didn't handle consecutive query strings separated by semi-colon in load file buffer.

Changes in Twitter MySQL 5.5.34.t13 (15 November 2013)

Beginning with Twitter MySQL 5.5.34.t13, we no longer support embedded MySQL server library.

Functionality Added

  • Crash Resistant Replication Slaves

This change ports Percona's crash resistant replication functionality. It makes replication relay log position transactional with respect to replication slave relay log application. The transactional relay info will overwrite at crash recovery time and therefore increase MySQL 5.5 replication reliability. Due to implementation, the change adds a limitation (480 characters) on the length of binary or relay log file names.

  • IPv6 SQL Functions

This change backports from MySQL 5.6 the following SQL functions INET6_ATON, INET6_NTOA, IS_IPV4, IS_IPV6, IS_IPV4_COMPAT, IS_IPV4_MAPPED.

Bugs Fixed

  • CVE-2012-5627 Reuse of SALT during multiple change_user executions.

This change ports a fix from Percona to eliminate the security vulnerability by disallowing repeated change user command executions in the same connection.

Update future_group_master_log_pos correctly in Xid_log_event. It fixes a known issue that Innodb_mysql_master_log_pos appears to be one event behind the actual last committed event.

Changes in Twitter MySQL 5.5.33.t12 (26 August 2013)

Functionality Added

  • Twitter Query Type Statistics

This change adds new system variable --twitter_query_stats to support Twitter query type statistics. This feature collects runtime statistics at query level, and it allows DBA to have better understanding of applications workload.

  • Configurable reserved superuser connections.

This change adds a global variable --superuser_connections to support configurable number of reserved connections for superusers.

  • Expose global rows_sent and rows_examined statistics.

This change adds two global status variables rows_sent and rows_examined. They expose the total number of table rows that have been sent to clients or examined by MySQL.

  • Improve InnoDB deadlock report.

This change adds plugin API to allow InnoDB to print more information about deadlock transactions.

Changes in Twitter MySQL 5.5.31.t11.1 (21 June 2013)

Functionality Added

  • Export InnoDB row searches statistics.

    This change adds two new status variables Innodb_rows_search_btree_index and Innodb_rows_search_hash_index. They expose InnoDB global stats of B+-tree row searches and adaptive hash index searches.

Bugs Fixed

  • Optimizer partition map should include timestamp-based partition endpoint.

    On table partitioned on timestamp using UTC_EXTRACT(YMD) function, query optimizer's used partition map didn't include the partition endpoint for predicate such as "(rows_created_at > '2013-07-01 13:55:00')". Miss the time partition endpoint would cause wrong query result. This fix corrects UTC_EXTRACT end point implementation.

Changes in Twitter MySQL 5.5.31.t11 (7 June 2013)

Functionality Added

  • Twitter audit logging.

    This change adds new system variable --twitter_audit_logging to support Twitter DBA audit logging. A new system privilege IGNORE LOGGING can be used to exempt a granted user from activity logging in the error log.

  • A non-blocking NO_WAIT mode for lock table.

    This change adds NO_WAIT clause to lock table syntax. Conflicting table metadata lock requests on a table locked in the non-blocking NO_WAIT mode will be aborted immediately.

  • IF EXISTS clause for drop user.

    This change adds IF EXISTS clause to drop user syntax. With IF EXISTS clause, drop user command will log a warning instead of raising error, if the user does not exist.

  • Information schema space statistics table extension.

    This change adds InnoDB tablespace file extension stats, EXTEND_REQS and EXTEND_BYTES, to INNODB_SPACE_STATS table.

  • Export InnoDB thread concurrency queue info.

    This change adds two new status variables Innodb_thread_concurrency_active and Innodb_thread_concurrency_waiting. They expose InnoDB thread concurrency FIFO queue status.

Bugs Fixed

Changes in Twitter MySQL 5.5.29.t10.1 (12 March 2013)

Bugs Fixed

Changes in Twitter MySQL 5.5.29.t10 (04 February 2013)

See also Changes in MySQL 5.5.29 for changes in the upstream release.

Bugs Fixed

  • Bug#68051: Killing a query inside InnoDB causes it to eventually crash with an assertion

    Killing a query that is inside InnoDB searching for a row causes InnoDB to crash with an assertion failure the next time the same table/cursor instance is used again.

    This is a regression introduced by the fix for Bug#14704286 (66c9023). The solution is to simply revert the original fix.

  • Revert MySQL revision f8a5acc (and any subsequent related changes).

    The fix for Bug#14548159 (Numerous cases of incorrect identifier quoting in replication) introduced a regression that breaks statement-based replication by generating statements with malformed quoting, which will cause a slave to stop since such statements cannot be parsed.

Functionality Added or Changed

  • Expose operations counters per table.

    This change introduces a set of per table statistics counters for handler operations. The counters are incremented for each specific operation on a handler instance and once the handler instance is closed, the counters are accrued in the table definition stored in the definition cache.

    An information schema table named TABLE_STATISTICS is introduced to provide the handler statistics counters for each table in the definition cache. Each counter is displayed in a separate column that, for example, records the number of insert, delete, or update operations, as well as other operations, plus columns for the table and database names.

  • Expose I/O operations counters per tablespace.

    This change introduces a set of per tablespace counters for read, write and flush operations. The counters are incremented whenever data is read, written or flushed to an InnoDB space. Additionally, the number of bytes read and written are also counted. These statistics are kept in the tablespace memory cache and, hence, are ephemeral.

    A new information schema table named INNODB_SPACE_STATS is introduced to expose these statistics counters. Each row of the table represents a space in the tablespace memory cache, and each column represents a counter value.

  • Slave should include the table name in its status while processing RBR events.

    When processing a row-based event, the SQL Thread state is updated to reflect what type of event is being processed, but short of dumping the event from the logs, there is currently no way to identify to which table the event is being applied to.

    In order to allow for easier identification of which table an event is being applied to, this change extends the SQL Thread state to also include the fully qualified name of the table associated with an event being applied.

  • Expose total per-table space file size as Max_data_length.

    This change repurposes the Max_data_length field of SHOW TABLE STATUS to expose the actual total size of the tablespace to which an InnoDB table belongs to. Previously, this field was left unused (zeroed) for such tables.

  • Print ISO date and PID with mysqld_safe log messages.

    Make mysqld_safe print log messages using a format similar to the one used by mysqld. The header should include a date printed using the ISO format (YYYY-MM-DD hh:mm:ss) and the process ID.

  • Report counter for InnoDB stall events.

    This change introduces a new status variable named Innodb_semaphore_stalls that exposes the number of detected semaphore stalls (e.g. long semaphore wait) so that it is possible to easily trigger alerts when these events occur.

Changes in Twitter MySQL 5.5.28.t9 (04 January 2013)

Bugs Fixed

  • Bug#67718: InnoDB drastically under-fills pages in certain conditions

    InnoDB's B+ tree page split algorithm that attempts to optimize for sequential inserts might end up causing poor space utilization depending on the distribution pattern of index key values throughout the index.

    For example, if an insert that causes a page to be split is inserting a key value that is an immediate successor or predecessor to the last inserted key value in the same page, the insertion point is used as the split point irrespective of the actual distribution of values in the page.

    The solution is to use the standard B+ tree split algorithm while still preserving some form of optimization for sequential inserts. When a page needs to be split, the median key value in a page is used as the split point so that the data is distributed in a symmetric fashion.

    A new variable named innodb_index_page_split_mode is introduced to provide a way to control the page split behavior. The variable accepts a set of permitted values: symmetric, lower and upper. Using symmetric alone, pages are always split roughly in the middle. When symmetric,lower or symmetric,upper are set, sequential inserts into the left-most or right-most page in the tree will cause the insertion point to be used as a reference for the split point.

  • Bug#67963: InnoDB wastes 62 out of every 16384 pages

    The problem is that once the segments of a tablespace are bigger than 32 pages, fragment pages are no longer allocated for use, yet they are still reserved whenever a new fragment extent is allocated. This is a direct consequence of mainly two facts: whenever a new descriptor page is needed (every 16384 pages), the extent that contains the descriptor page cannot be assigned to a segment and is instead used as a fragment extent; and a segment can only allocate up to 32 fragment pages since the array used to track fragment pages belonging to a segment is limited to 32 entries per segment.

    The solution is to allow for fragment extents to be leased to segments whenever there are free fragment extents available. A fragment extent is considered available if the only used pages in the extent are the extent descriptor and ibuf bitmap pages. A new extent state is used to tag leased extents and to ensure that they are returned to the space free fragment list once no longer being used by a segment.

  • Bug#68023: InnoDB reserves an excessive amount of disk space for write operations

    When performing operations that are expected to expand a table (for example, allocate new pages due to a page split), InnoDB currently preallocates and reserves up to 1% of the total size of the tablespace as a measure to ensure that enough free extents (that is, disk space) are available for the operation and to ensure that if running out of disk space, these operations are preemptively failed as to reserve any remaining free space to operations that end up freeing space (that is, delete data).

    The percentage is reasonable for tables smaller than a few gigabytes, but not for tables sized at tens of gigabytes or more, at which point the percentage won't correctly estimate the free space needed to perform operations and may cause an excessive amount of free extents to be preallocated.

    This change introduces two new system variables to enable/disable free extents reservation and to control the amount of free extents that is reserved for such operations. The variable innodb_reserve_free_extents can be used to enable or disable free extents reservation and innodb_free_extents_reservation_factor can be used to control what percentage of a space size is reserved for operations that may cause more space to be used.

Functionality Added or Changed

  • Log checkpoint triggered flushes might be synchronous and asynchronous.

    To better reflect the synchronization status of such flushes, this change adds a new status variable named innodb_buffer_pool_flush_async_page as a separate counter for asynchronous flushes.

  • Export insert buffer statistics.

    This change introduces a set of new status variables for insert buffering operations. See ibuf status variables for details.

  • Expose purge age information

    This introduces new status variables that expose the purge age in transactions and undo log: Innodb_purge_trx_no, Innodb_purge_undo_no and Innodb_trx_max_id.

  • Add counters for successful page merges and page discards.

    Currently Innodb_page_merges counts only merge attempts but there is no metric for successful merges. This change introduces a new status variable named Innodb_page_merges_succeeded which indicates the number of successful page merge operations (that is, the number of pages successfully merged into another page).

    Additionally, this change also introduces a new status variable named Innodb_page_discards which represents the number of pages that have become empty and were thus discarded.

  • Support for floating-point system variables using the plugin interface.

    Augment the server plugin interface to allow plugins to define and expose floating-point system variables of type double. The convenience macros MYSQL_SYSVAR_DOUBLE and MYSQL_THDVAR_DOUBLE are introduced and can be used by plugins to declare system variables of type double.

  • The fractional part of the def, min and max values of system variables is ignored.

    Since the command-line option parsing interface (my_getopt) uses fields of type unsigned long long to store these values, the double values were being stored in a lossy way that discards the fractional part.

    This change allows the default, minimum and maximum values of system variables of type double to have a meaningful fractional part by to storing the raw representation of a double value in the raw bits of an unsigned long long field in a way that the binary representation remains the same. Hence, the actual value can be passed back and forth between the types.

  • Change the type of the system variables innodb_segment_fill_factor and innodb_index_fill_factor to double.

    These variables are used to represent percentages but were defined to be of type integer as their values could not be set to percentages with fractional parts because of the problem described above.

    Furthermore, their initial default values were fractional percentages, but had to be changed because the interface did not support them. Now these system variables are made of type double and their default values are restored to their original form.

  • Fixed some some test failures.

    Suppressed unsafe statement warnings generated by the rpl_filter_tables_not_exist test case. Increased timeout of the innodb_mysql test case. Fixed spurious failures of the rpl_start_stop_slave test case.

Changes in Twitter MySQL 5.5.28.t8 (13 November 2012)

See also Changes in MySQL 5.5.28 for changes in the upstream release.

Bugs Fixed

  • Bug#67156: Sporadic query cache related crash in pthread_rwlock_init()

    Reinitializing the query cache could lead to a crash inside pthread_rwlock_init() on Mac OS X.

  • Bug#67433: Using SET GLOBAL SQL_LOG_BIN should not be allowed

    Earlier in MySQL 5.5 development cycle, the SQL_LOG_BIN variable was made to be both global and session-scoped, instead of only session as it was in previous releases. The problem is that usage of SQL_LOG_BIN at the global scope can be quite dangerous, potentially leading to data loss with binary logging being disabled for new (and unrelated) sessions.

    This changes makes SQL_LOG_BIN once again a session-only variable, generating an error if it is used with SET GLOBAL.

  • Bug#67476: Innodb_buffer_pool_read_ahead_evicted is inaccurate

    If a page being read into the buffer pool is made "young" (moved to the head of the LRU), its time of first access was not being properly set. When the page eventually gets evicted, it would be counted as a read-ahead page that was evicted without having been accessed by queries. This lack of access time could also affect linear read-ahead, potentially causing InnoDB to calculate multiple times whether to trigger read-ahead whenever the page was accessed.

  • Gracefully handle errors when disarming a statement timer.

    If the timer for a statement timeout cannot be properly disarmed, assume that the timer might be pending.

Functionality Added or Changed

  • Lightweight I_S table to hold basic information about each page in the InnoDB buffer pool

    Retrieving page information from the information_schema table INNODB_BUFFER_PAGE can become computationally expensive in terms of time and and disk storage since the temporary table that is created to materialize the table is populated with all fields, some of which are very large (table name, column, etc.).

    Since, currently, the main use case of the table is to export a list of space and page numbers from the buffer pool, this change introduces a new information_schema table, named INNODB_BUFFER_PAGE_BASIC, that only holds these particular fields for each index page in the buffer pool.

  • Increase time resolution of expire_logs_days

    In some scenarios, it is necessary to purge the binary logs more frequently than once a day. In these cases, expire_logs_days cannot be used for automatic binary log file removal because of its whole-day resolution.

    In order to allow for more fine-grained control over the automatic removal period, the type of the expire_logs_days variable is changed to decimal where the fractional part represents the fraction of one day. For example, 12 hours can be expressed as 0.5 day.

  • Thread state is "query end" while blocked writing to binary log

    When binary logging is enable, the thread state is set to "query end" most recently before writing to the binary log, so any time taken in that (due to contention or I/O) shows up as "query end" which makes it difficult to determine what is the current state of the thread.

    This change introduces new and more appropriate thread states that are set in any binary log related activities that may take time. For example, now whenever an event is being writing to the binary log, the thread state is set to "Writing an event to the binary log".

  • Add new InnoDB status variables for InnoDB B-tree node operations

    Introduced new counters for InnoDB b-tree page operations such as page split, merge and reorganization.

  • A non-blocking mode for ALTER TABLE

    While an ALTER TABLE is executing, writes to the table whose definition is being changed are blocked until the operation completes or a lock wait timeout occurs.

    In a sharded system, it would be better if conflicting operations were aborted rather than blocked, thereby eliminating delays due to lock waits and allowing them to be redirect to another shard.

    In order to allow for this behavior, this change introduces a new ALTER TABLE option named NO_WAIT. When NO_WAIT is set, conflicting locks requests that would normally block are aborted instead.

  • ALTER TABLE in exclusive mode

    In certain cases, it is desirable to control the lock mode to be used for an ALTER TABLE operation, especially in a scenario where it is appropriate to restrict access to the table while the operation is in progress.

    This change adds a LOCK clause to ALTER TABLE, that can be used to enforce a specific lock mode for an alter table operation. The only supported lock mode parameter is EXCLUSIVE and is meant to be used in conjunction with NO_WAIT to abort any attempts to use a table while its structure is being changed.

  • Expose the level of each B-tree page in the buffer pool

    Although the INNODB_BUFFER_PAGE table shows the number of records within a page, it is not clear whether these records are row data or internal B-tree pointers. For this reason, a new LEVEL column is introduced which shows the level of a page in the B-tree.

    Additionally, the direction of insertion encoded in InnoDB data pages is now available in the DIRECTION column, and the number of consecutive inserts in that direction is available in the N_DIRECTION column. These columns are useful to determine whether records are being inserted in an ascending or descending sequence.

  • Expose the segment fill factor as a configurable setting

    When allocating a page from a segment, InnoDB has an internal fill factor setting that is used to decide whether to allocate a new extent or to use an unused page. In short, the segment fill factor is used to determine how full to make the segment before extending it.

    This change introduces a new variable named innodb_segment_fill_factor that can be used to control the fill factor. Its value specifies the percentage of space on a segment to be used, reserving the remainder as free space for future growth.

  • Expose the index fill factor as a configurable setting

    When extending a clustered index to the left or right, InnoDB attempts to fill leaf pages only up to a certain percentage (known as the fill factor), at which point the page is split. The remaining space is reserved for updating rows belonging to the page, attempting to make it likely that an updated row will be stored on the same page.

    This change introduces a new variable name innodb_index_fill_factor that can be used to control the fill factor for clustered indexes. Its value specifies the percentage of space on a leaf page to be used, reserving the remainder as free space.

Changes in Twitter MySQL 5.5.24.t7 (25 July 2012)

See also Changes in MySQL 5.5.24 for changes in the upstream release.

Bugs Fixed

  • Bug#65715: Wrong connection ID (thread ID) in the general and slow query logs

    Connection IDs (thread IDs) above 2^32 were not being properly written to the general query log. The method used to write commands to the log (e.g. MYSQL_QUERY_LOG::write) uses a 32-bits wide integer to store the connection ID value, which is actually a 64-bits wide integer value, thus causing the higher bits of the value to be discarded.

  • Bug#65830: utf8_general_cs is not available

    The problem is that although the utf8_general_cs collation is enabled in CMake, the config option (HAVE_UTF8_GENERAL_CS) is not being copied over to the configuration header (e.g. config.h) because it lacks a stub in config.h.cmake for CMake to replace with the actual value of the variable.

Functionality Added or Changed

  • Expose current row-based replication (RBR) execution state in the SQL Thread state

    The execution of row-based events in a replication slave is not reflected in the SQL Thread state, making it rather difficult to identify long-running events. For example, the execution of a large row-by-row delete event is not immediately identifiable as the replication SQL thread state for most of its duration stays as "Reading event from the relay log".

    This change adds two new states to the replication slave SQL thread that are used to highlight the event that the SQL thread is executing and, for row-based events, to indicate how many rows have been applied. These will generally look like:

    Executing Delete_rows event at position 100
    Handling record 50 of 100 for a Delete_rows event

    Additionally, the outermost state of a thread state is now saved and restored when inner states are set, so that the overall information of what the thread is doing is not lost.

  • Add an event to send column information in RBR

    Although Table_map events include some column metadata information, such as type and length, they lack the necessary information to fully deduce a column's definition and to interpret its values. For example, information such as the column name, whether an integer type is signed or unsigned, or the character set of string types, is missing. This makes it difficult for external programs to extract meaningful row data from row-based events.

    In order to enable external programs to fully deduce the table/column definitions, a new Table_metadata event is added. The purpose of this event is to describe the structure and other properties of the table and its columns, such as name, SQL type name, character set, etc. Each Table_metadata event follows a Table_map. Whether Table_metadata events are written to the binary log can be controlled using the system variable binlog_rows_table_metadata_events.

  • Print ISO date and PID with all error log messages.

    The currently available fields that compromise the header of error log messages, which are the date and time, plus the severity of the message, do not provide the enough information to identify discontinuity in reporting or which process generated a message.

    To make such identification possible, this change includes the process ID in the header so that any changes in its value will identify the source (process) of the message and also indicate any discontinuity in reporting.

    Additionally, the format of the date and time is changed to the ISO format (YYYY-MM-DD hh:mm:ss). The previous format was non-standard and difficult to read.

  • Provide the resulting error code for queries printed to the slow log

    The slow query log did not provide enough information to determine if logged SQL statements completed successfully or whether they failed for some reason (e.g. they were killed). To make this easier, the resulting error number of a slow SQL statement is now printed to the slow query log in the Error_code field.

  • Error when creating RBR-safe non-deterministic stored function due when binary logging is enabled

    Even though the creation of non-deterministic functions can be allowed by enabling log_bin_trust_function_creators, enabling the option also implies that executing such functions is allowed even if the binary log format is set to statement. If the binary log format is set to row-based, creating and executing non-deterministic functions shouldn't pose any problems. Hence, this change allows non-deterministic functions to be created when the binary log format is set to row-based. If said functions are invoked at runtime when the binary log format is statement-based, they will fail with an error.

  • Use an absolute install name for the shared library on Mac OS X

    In order to allow Apple's Mac OS X dynamic linker to locate the mysqlclient shared library even if the path where it is installed is not in the default search path, change the shared library install name from just the library filename to the absolute path to the library.

Changes in Twitter MySQL 5.5.23.t6.1 (20 June 2012)

Bugs Fixed

Changes in Twitter MySQL 5.5.23.t6 (11 June 2012)

See also Changes in MySQL 5.5.23 for changes in the upstream release.

Bugs Fixed

  • Bug#65469: Infinite loop when opening a corrupted table

    If a permanently corrupted page was read, InnoDB would forever keep trying to read the page.

  • Bug#65310: Crash with partition pruning and impossible condition

    Reading from a partitioned table using an impossible (e.g. WHERE, BETWEEN, etc.) condition could lead to a crash if all partitions are pruned and the optimizer attempts to obtain the number of rows in the table. The problem occurs because even though no partitions are used, the optimizer might still attempt to perform (e.g. using range) analysis where an estimate of the the number of rows is needed, but the partition storage engine wasn't prepared to provide it.

Functionality Added or Changed

  • Add partitioning functions for YMD and YMDH or equivalent

    Added a UTC_EXTRACT(unit FROM date) function that extracts parts from a date and returns them as an integer in a specified format. The function is modeled after EXTRACT(), but differs in that it uses UTC for all of its calculations. The supported unit specifiers are YEAR_MONTH_DAY and YEAR_MONTH_DAY_HOUR, which return a representation of the date argument as a value in the YYYYMMDD or YYYYMMDDHH format, respectively.

    This function is intended to facilitate partitioning by days, especially when applied to TIMESTAMP values. It allows partitions to be named in a more human-readable format (such as YYYYMMDD).

  • Export the last know good binary log position as a status variable from InnoDB

    Introduced two new status variables that export the master binary log name and position of a slave as stored by InnoDB. Whenever the SQL thread commits a transaction, InnoDB also commits the master binary log name and position to the system tablespace. Now this information can be retrieved through the Innodb_mysql_master_log_file and Innodb_mysql_master_log_pos status variables.

  • Report counters for InnoDB corruption events so that they are alertable

    Introduced status variables that expose a counter of page corruption and table corruption events so that they can be alerted on without scanning the error log files.

  • Improve obscure "Got error -1 when reading table" messages

    The problem was that handler originated errors printed to the error log sometimes do not indicate the precise nature of the problem. This is especially an issue with InnoDB because it cannot always convert an internal InnoDB error code to a MySQL error code.

    InnoDB now provides an additional (and more detailed) error message if it cannot convert the error code. Additionally, errors related to a statement being interrupted are no longer printed to the error log.

    Also, the error message format was changed from "Got error when reading table" to "Error when reading table: error message (error number)" in order to distinguish the offending error message.

  • Use the Google Breakpad crash reporting system

    Google's Breakpad is now used to generate minimal crash dump information when the server process (mysqld) crashes. The minidump file generated by breakpad contains a list of the executable and shared libraries loaded in the process, the state of the processor register and a stack trace for each thread, and miscellaneous information about the system and the reason for the dump. Minidumps are significantly smaller than core files, making them more practical for collection and processing.

  • Added non-functional RQG tests for InnoDB data compression

  • Binaries are now compiled with debugging symbols and are dynamically linked to the the Standard C++ Library (libstdc++)

Changes in Twitter MySQL 5.5.22.t5 (24 April 2012)

See also Changes in MySQL 5.5.22 for changes in the upstream release.

Bugs Fixed

  • Bug#65030: Innodb_buffer_pool_pages_flushed reports incorrect number of flushed pages

    The internal counter for the number of flushed pages (srv_buf_pool_flushed) was being incremented twice, once in buf_flush_batch() and again in buf_flush_common().

  • Bug#65061: LRU flush rate calculation is based on invalid values

    The internal counter for the number of pages flushed as part of LRU flushing was being incremented twice, once in buf_flush_LRU_list_batch() and again in buf_flush_common(). This could lead to an incorrect calculation of the rate at which LRU flush is happening, which might later affect the statistics associated with adaptive flushing.

  • Potential security issue with Oracle MySQL

    If, for whatever reason, the memcmp() call in check_scramble() returns a value with the 8 rightmost bits set to zero (e.g. 256), an invalid password could be accepted during authentication.

Functionality Added or Changed

  • MYSQL-62: Replication info not available from crash recovery?

    Restored code that stores the master binary log position of a slave in InnoDB's data file. Like in earlier MySQL versions, if a slave crashes, the name and position of the slave in relation to the master binary log file is printed after crash recovery.

  • Backport innodb_flush_neighbors from MySQL 5.6

    Backported from MySQL 5.6 the innodb_flush_neighbors option that controls whether flushing a page from the InnoDB buffer pool also flushes other dirty pages in the same extent.

  • Add ability to disable anticipatory flushing

    Introduced the innodb_anticipatory_flushing option that controls whether the master thread will flush dirty pages from the buffer pool if there is I/O bandwidth available for background tasks.

  • Add InnoDB flush-related status variables

    Introduced status variables that provide counters for the various flushing-related tasks performed by InnoDB. For example, these counters provide information about the number of pages scanned and flushed from the flush and LRU lists. Also, there are counters for the number of pages flushed by the background thread.

Changes in Twitter MySQL 5.5.21.t4 (06 March 2012)

See also Changes in MySQL 5.5.21 for changes in the upstream release.

Bugs Fixed

  • MYSQL-35: Packages for Mac OS X should not set -arch flags in mysql_config --cflags

    When building OS X universal binaries, the size of certain types might vary across architectures. Use architecture-to-size mapping to properly detect the size of time_t. This should fix a failure of the timezone test case.

  • MYSQL-30: Research safer buffer pool dump/restore method

    Fix tablespace bounds checking, the offset of the last page is the tablespace size minus one.

  • Bug#60682: deadlock from thd_security_context

    In order to avoid a deadlock-prone lock order, the query of a session associated with an active transaction is no longer displayed in the output of SHOW ENGINE INNODB STATUS.

  • Bug#64556: Interrupting a query inside InnoDB causes an unrelated warning to be raised

    Interrupting a statement (with KILL QUERY) that is executing inside InnoDB leads to an unrelated warning being raised in the context of the connection whose statement was interrupted.

Functionality Added or Changed

  • MYSQL-42: Allow pre-allocation of InnoDB file-per-table (ibd) tablespace files

    Added the ability to set the initial size and to extended the size, in pages, of per-table tablespaces. The option is only meaningful if innodb_file_per_table is enabled.

  • MYSQL-45: InnoDB should allow flushing to be gated by age of pages

    In order to reduce and control the frequency of write requests to SSD-based storage systems, this change introduces a new variable named innodb_flush_dirty_pages_age which can be used to set the minimum age (in seconds) of dirty pages to be flushed from the buffer pool, if the number of dirty pages is below the maximum percentage.

  • MYSQL-46: Make Replication filter settings dynamic

    Makes the slave options --replicate-* dynamic variables so that these options can be changed dynamically while the server is running, which enables users to modify replication filtering rules without having to stop and restart the server.

  • MYSQL-15: Implement server-side statement timeout support

    Introduces a server-side time limit for the execution of statements. The feature works by interrupting the execution of statements that take over a specified amount of time (in milliseconds) to complete. After the specified time has passed, the server attempts to abort the statement without affecting the session (connection) itself.

Changes in Twitter MySQL 5.5.20.t3 (06 February 2012)

See also Changes in MySQL 5.5.20 for changes in the upstream release.

Bugs Fixed

  • MYSQL-40: RPM "Obsoletes:" lines make it impossible to "yum install" specific old versions

    The "obsoletes" property of newer MySQL-server packages was interfering with the Yum installation of older (obsoleted) MySQL packages from different repositories. In order to avoid any obsoletes processing logic in Yum, the obsoletes property was simply removed.

  • MYSQL-39: Accessing innodb_buffer_page is very slow

    Temporary MyISAM tables, which are used to internally store the contents of large INFORMATION_SCHEMA tables, were being created using the static (fixed-length row) MyISAM storage format, which causes CHAR and VARCHAR columns to be padded to the column width. Given that the INNODB_BUFFER_PAGE table has a few large VARCHAR columns, and depending on the size of the buffer pool, this behavior would lead to large (tens of gigabytes) temporary tables being written to disk. Such temporary tables are now stored using the dynamic format, which uses significantly less disk space.

  • MYSQL-38: Counters in innodb_buffer_pool_stats seem broken

    The value of the NUMBER_PAGES_CREATED and NUMBER_PAGES_WRITTEN columns of the INNODB_BUFFER_POOL_STATS were being mistakenly set to the rate of pages created and written.

Functionality Added or Changed

  • MYSQL-37: Export InnoDB LSN information

    Added status variables that show the current log sequence number (Innodb_lsn_current), how far the log has been flushed to disk (Innodb_lsn_flushed), and the position at which InnoDB last took a checkpoint (Innodb_lsn_checkpoint).

  • MYSQL-28: Produce installable dmg+pkg builds for Mac OS X

    Various changes related to building on Mac OS X and producing installable packages.

  • MYSQL-27: Report test results to jenkins

    Artificial tests used for reporting unit-tests results, Valgrind warnings, etc., that have no associated suite name, are now added by default to the 'report' test suite for reporting purposes.

  • WL#5914: remove option "--all" and BDB errors from the "perror" program.

    Back-ported removal of the --all option that relied on deprecated APIs (e.g. sys_errlist).

Changes in Twitter MySQL 5.5.19.t2 (06 January 2012)

See also Changes in MySQL 5.5.19 for changes in the upstream release.

Bugs Fixed

Functionality Added or Changed

  • MYSQL-27: Report test results to jenkins

    Added JUnit reporting support to the MySQL test suite.

  • MYSQL-30: Research safer buffer pool dump/restore method

    Added information_schema tables INNODB_BUFFER_PAGE, INNODB_BUFFER_POOL_STATS and INNODB_BUFFER_PAGE_LRU, which represents information about each page in the InnoDB buffer pool and their position in the LRU list. This change also introduces a prefetch_pages command to the InnoDB storage engine. This command may be use to prefetch (retrieve from disk) index and data pages into the buffer pool. The prefetch command syntax is: ENGINE_CONTROL(InnoDB, prefetch_pages, space, page [, page ...])

  • MYSQL-31: Implement super_only mode to restrict all queries to SUPER-user only

    Introduced a super_only variable that restricts all statements, rather than just update statements as was already possible with read_only, to users holding the SUPER privilege.

  • MYSQL-29: Remove stop/start logic from RPM install/upgrade process

    RPM install/upgrade now fails if a MySQL server instance is currently running. Any instance must be stopped before a package upgrade can continue.

  • MYSQL-10: Modules for non-functional testing: sysbench, randgen, dbt2, etc.

    Added additional optimizer, replication and InnoDB RQG-based stress tests.

Changes in Twitter MySQL 5.5.19.t1 (06 December 2011)

See also Changes in MySQL 5.5.19 for changes in the upstream release.

Bugs Fixed

Functionality Added or Changed

  • MYSQL-14: Twitter MySQL build configuration

    The RPM package now provides information about the organization that maintains and distributes the RPM package (Twitter, Inc.). Also, upgrades are now only allowed between packages of the same vendor (Twitter, Inc.).

  • MYSQL-22: Make population of column source metadata in result sets optional

    This change introduces a new protocol mode that instructs MySQL to empty certain object names that are part of the result set metadata. Only the absolutely minimal (or essential) set of names is preserved. If the minimal option is set, the database, table (both original and aliased) and column names in the result set metadata will be empty strings. Only the column alias name is preserved.

  • MYSQL-23: Integrate (and port) patch for Innodb_deadlocks

    Introduce an Innodb_lock_deadlocks server status variable that provides the number of deadlocks that have occurred within InnoDB.

  • MYSQL-24: Include git sha in version_comment

    The version_comment field now contains a reference to the last git commit object in the checked out branch that was used to build the source package.

  • MYSQL-25: Add new InnoDB status variables Innodb_files_{open,opened,closed}

    Added status variables Innodb_files_open, Innodb_files_opened, Innodb_files_closed, Innodb_tablespace_files_open, Innodb_tablespace_files_opened, and Innodb_tablespace_files_closed, that show the number of open, opened and closed files within InnoDB and within InnoDB's tablespaces.

  • Removed extraneous space in InnoDB log message "Waiting for the background threads to start".

Changes in Twitter MySQL 5.5.19 (16 November 2011)

See also Changes in MySQL 5.5.19 for changes in the upstream release.

Bugs Fixed

Functionality Added or Changed

  • MYSQL-10: Modules for non-functional testing: sysbench, randgen, dbt2, etc.

    Added optimizer, partitioning, runtime and InnoDB RQG-based tests.

  • MYSQL-16: Augment mysqld_safe to flush caches and set NUMA policy

    Added mysqld_safe options to flush (sync and drop) caches before starting mysqld and to set the NUMA memory allocation policy to interleave.

  • MYSQL-12: Improve MySQL memory allocation, especially under NUMA

    Added option innodb-buffer-pool-populate to force the operating system to pre-allocate in physical memory the page frames required for the buffer pool memory region.

  • MYSQL-14: Twitter MySQL build configuration.

    Now there is a build configuration specific for Twitter MySQL builds.

Changes in Twitter MySQL 5.5.18 (24 October 2011)

See also Changes in MySQL 5.5.18 for changes in the upstream release.

Bugs Fixed

Functionality Added or Changed

  • Fixed various compiler warnings.