- 31 Mar, 2017 4 commits
-
-
Marko Mäkelä authored
InnoDB divides the allocation of undo logs into rollback segments. The DB_ROLL_PTR system column of clustered indexes can address up to 128 rollback segments (TRX_SYS_N_RSEGS). Originally, InnoDB only created one rollback segment. In MySQL 5.5 or in the InnoDB Plugin for MySQL 5.1, all 128 rollback segments were created. MySQL 5.7 hard-codes the rollback segment IDs 1..32 for temporary undo logs. On upgrade, unless a slow shutdown (innodb_fast_shutdown=0) was performed on the old server instance, these rollback segments could be in use by transactions that are in XA PREPARE state or transactions that were left behind by a server kill followed by a normal shutdown immediately after restart. Persistent tables cannot refer to temporary undo logs or vice versa. Therefore, we should keep two distinct sets of rollback segments: one for persistent tables and another for temporary tables. In this way, all 128 rollback segments will be available for both types of tables, which could improve performance. Also, MariaDB 10.2 will remain more compatible than MySQL 5.7 with data files from earlier versions of MySQL or MariaDB. trx_sys_t::temp_rsegs[TRX_SYS_N_RSEGS]: A new array of temporary rollback segments. The trx_sys_t::rseg_array[TRX_SYS_N_RSEGS] will be solely for persistent undo logs. srv_tmp_undo_logs. Remove. Use the constant TRX_SYS_N_RSEGS. srv_available_undo_logs: Change the type to ulong. trx_rseg_get_on_id(): Remove. Instead, let the callers refer to trx_sys directly. trx_rseg_create(), trx_sysf_rseg_find_free(): Remove unneeded parameters. These functions only deal with persistent undo logs. trx_temp_rseg_create(): New function, to create all temporary rollback segments at server startup. trx_rseg_t::is_persistent(): Determine if the rollback segment is for persistent tables. trx_sys_is_noredo_rseg_slot(): Remove. The callers must know based on context (such as table handle) whether the DB_ROLL_PTR is referring to a persistent undo log. trx_sys_create_rsegs(): Remove all parameters, which were always passed as global variables. Instead, modify the global variables directly. enum trx_rseg_type_t: Remove. trx_t::get_temp_rseg(): A method to ensure that a temporary rollback segment has been assigned for the transaction. trx_t::assign_temp_rseg(): Replaces trx_assign_rseg(). trx_purge_free_segment(), trx_purge_truncate_rseg_history(): Remove the redundant variable noredo=false. Temporary undo logs are discarded immediately at transaction commit or rollback, not lazily by purge. trx_purge_mark_undo_for_truncate(): Remove references to the temporary rollback segments. trx_purge_mark_undo_for_truncate(): Remove a check for temporary rollback segments. Only the dedicated persistent undo log tablespaces can be truncated. trx_undo_get_undo_rec_low(), trx_undo_get_undo_rec(): Add the parameter is_temp. trx_rseg_mem_restore(): Split from trx_rseg_mem_create(). Initialize the undo log and the rollback segment from the file data structures. trx_sysf_get_n_rseg_slots(): Renamed from trx_sysf_used_slots_for_redo_rseg(). Count the persistent rollback segment headers that have been initialized. trx_sys_close(): Also free trx_sys->temp_rsegs[]. get_next_redo_rseg(): Merged to trx_assign_rseg_low(). trx_assign_rseg_low(): Remove the parameters and access the global variables directly. Revert to simple round-robin, now that the whole trx_sys->rseg_array[] is for persistent undo log again. get_next_noredo_rseg(): Moved to trx_t::assign_temp_rseg(). srv_undo_tablespaces_init(): Remove some parameters and use the global variables directly. Clarify some error messages. Adjust the test innodb.log_file. Apparently, before these changes, InnoDB somehow ignored missing dedicated undo tablespace files that are pointed by the TRX_SYS header page, possibly losing part of essential transaction system state.
-
Sergei Golubchik authored
-
Sergei Golubchik authored
this closes the memory leak, that started to appear after da5c3e03
-
Alexander Barkov authored
-
- 30 Mar, 2017 6 commits
-
-
Marko Mäkelä authored
trx::has_logged_persistent(): Renamed from trx_is_redo_rseg_updated(). Determines if a transaction has generated any persistent undo log. trx::has_logged(): Renamed from trx_is_rseg_updated(). Determines if a transaction has generated any undo log.
-
Marko Mäkelä authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
- 29 Mar, 2017 5 commits
-
-
Jacob Mathew authored
Added CHECK constraints to I_S.TABLE_CONSTRAINTS. Fixed a bug regarding virtual column definitions whose name is the field name. Added test case: check_constraint_show
-
Igor Babaev authored
The function Item::split_sum_func2() incorrectly processed the function items with window functions that were not window functions themselfes and were used as arguments of other functions.
-
Igor Babaev authored
With the current design the function copy_funcs() should ignore the items with window functions from the array **func_ptr.
-
Sergei Golubchik authored
followup for da5c3e03
-
Alexander Barkov authored
-
- 28 Mar, 2017 16 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
moved to storage/innobase/ also removed duplicate checks from storage/innobase/CMakeLists.txt (they're all in storage/innobase/innodb.cmake)
-
Sergei Golubchik authored
MDEV-11605 Assertion `(longlong) thd->status_var.local_memory_used >= 0 || !debug_assert_on_not_freed_memory' failed in my_malloc_size_cb_func MyISAM in compute_vcols() - which is used only in mi_check code - was computing indexed vcols into an internally allocated buffer (not record[0]) and the buffer was calculated to be long enough to fit every keyseg (a keyseg knows where its value in a record buffer is and the length of the value). This logic didn' work for prefix keys, because the keyseg length is the length of a prefix, but the record buffer needs to fit the complete value of a vcol. In this bug MyISAM was writing a 2K varchar into a buffer too short. Also it didn't work for repair-with-keycache, because that code recalculats all vcols, not only indexed ones. So, the buffer size (MYISAM_SHARE::vreclength) should include all vcols' full lengths. But it was calculated in mi_open and low-level MyISAM code has no knowledge of vcols. As a fix we now recalculate MYISAM_SHARE::vreclength in ha_myisam::setup_vcols_for_repair() which is always called before compute_vcols().
-
Sergei Golubchik authored
MDEV-10354 Assertion `! is_set()' failed in Diagnostics_area::set_ok_status on CREATE TABLE with invalid default test case
-
Sergei Golubchik authored
MDEV-11114 Cannot drop column referenced by CHECK constraint: Unknown column 'a' in 'virtual column function' clarify the error message
-
Sergei Golubchik authored
add columns needed for CHECK constraints not only to read_set, but also to vcol_set.
-
Sergei Golubchik authored
give threads more descriptive names
-
Sergei Golubchik authored
-
Sergei Golubchik authored
don't build the server with jemalloc. only build tokudb with it. move tokudb into a separate package, because it brings a new dependency
-
Sergei Golubchik authored
disable XtraDB in a way that makes it impossible to be built
-
Sergei Golubchik authored
* remove redundant casts * fix fix_win_paths() not to pretend that it takes const char* string because it changes it. Fix its callers not to pass const strings into it. * use _WIN32 not __WIN__
-
Sergei Golubchik authored
increase stack size for labrador
-
Sergei Golubchik authored
* add a clarifying comment * apply /wd4244 /wd4146 to ref10 source files, not to the library
-
Sergei Golubchik authored
-
Alexey Botchkov authored
Added IS_GENERATED and GENERATION_EXPRESSION columns required by the SQL standard
-
Jan Lindström authored
-
- 27 Mar, 2017 5 commits
-
-
Igor Babaev authored
The function st_select_lex_unit::exec_recursive() incorrectly determined that a CTE mutually recursive with some others was stabilized in the case when the non-recursive part of the CTE returned an empty set. As a result the server fell into an infinite loop when executing a query using this CTE.
-
-
Vladislav Vaintroub authored
Do not truncate pointers returned by _findfirst to int.
-
Igor Babaev authored
Mutually recursive CTE could cause a crash of the server in the case when they were not Standard compliant. The crash happened in mysql_derived_prepare(), because the destructor the derived_result object created for a CTE that was mutually recursive with some others was called twice. Yet this destructor should not be called for resursive references.
-
Igor Babaev authored
The method With_element::check_unrestricted_recursive() icorrectly performed the check that no recursive reference is not encountered in inner parts of outer joins. As a result the server reported errors for valid specifications with outer joins.
-
- 26 Mar, 2017 1 commit
-
-
Vladislav Vaintroub authored
-
- 24 Mar, 2017 3 commits
-
-
Marko Mäkelä authored
This could fix a race condition between mysqld and perl on Windows.
-
Marko Mäkelä authored
The test was unnecessarily depending on InnoDB purge, which can sometimes fail to proceed. Let us rewrite the test to use BEGIN;INSERT;ROLLBACK to cause the immediate removal of the desired records.
-
Marko Mäkelä authored
-