1. 17 Jan, 2008 1 commit
    • marko's avatar
      branches/zip: Avoid infinite page splits on compressed tables. · cf981715
      marko authored
      btr_page_get_sure_split_rec(): Remove the check if insert_size
      exceeds free_space.
      
      btr_page_split_and_insert(): If a compressed page has already been split,
      avoid further splits by inserting the record to an empty page.  As a
      performance optimization, avoid invoking btr_page_insert_fits() on
      compressed tables.
      cf981715
  2. 16 Jan, 2008 7 commits
    • marko's avatar
      branches/zip: btr_page_get_sure_split_rec(): Return NULL when the record · ddd940a9
      marko authored
      is not guaranteed to fit on a compressed page, instead of letting
      an assertion fail.
      ddd940a9
    • marko's avatar
      branches/zip: os_mem_alloc_large(), os_mem_free_large(): · c9b221e8
      marko authored
      Update ut_total_allocated_memory.
      c9b221e8
    • marko's avatar
      branches/zip: Free the buffer pool at shutdown. · 66791e5a
      marko authored
      buf_pool_free(): New function: Free all chunks of the buffer pool.
      
      innobase_shutdown_for_mysql(): Call buf_pool_free() right before
      ut_free_all_mem().
      66791e5a
    • marko's avatar
      branches/zip: Add comments about the lock and latch protection of externally · 7d18bba5
      marko authored
      stored columns (BLOBs).
      
      btr_copy_blob_prefix(), btr_copy_zblob_prefix(),
      btr_copy_externally_stored_field_prefix_low(),
      btr_copy_externally_stored_field_prefix(),
      btr_copy_externally_stored_field(),
      btr_rec_copy_externally_stored_field():
      Note that the page containing the clustered index record that points to
      the BLOB must be latched.
      
      btr_copy_zblob_prefix(): Note that there is no latch on the page, and thus
      all accesses to a given page via this function must be covered by the same
      set of locks or latches.
      
      btr_copy_zblob_prefix(): Note that the block acquired by
      buf_page_get_zip() is protected by an exclusive table lock or
      or by a latch on the clustered index record.
      7d18bba5
    • marko's avatar
      branches/zip: Fetch externally stored columns only when the clustered index · 865b5d6a
      marko authored
      record is protected by a latch or a lock.
      
      dtuple_copy(): New function: Copy a data tuple.
      
      row_upd_replace(): New function: Apply on a row an update vector that
      was built for the clustered index.  Set up a cache of externally stored
      column prefixes if needed.
      
      undo_node_t: Add the fields undo_row, undo_ext.
      
      row_undo_search_clust_to_pcur(): Initialize undo_row and undo_ext.
      
      row_undo_mod_upd_exist_sec(): Instead of fetching prefixes of
      externally stored columns, use the undo_row and undo_ext that were
      initialized in row_undo_search_clust_to_pcur().
      
      upd_node_t: Remove the field n_ext.  Add the fields upd_row and upd_ext.
      
      row_upd_store_row(): Initialize the upd_row and upd_ext fields of upd_node_t.
      
      row_upd_sec_index_entry(), row_upd_clust_rec_by_insert(): Instead of
      fetching prefixes of externally stored columns, use the upd_row
      and upd_ext that were initialized in row_upd_store_row().
      865b5d6a
    • marko's avatar
      branches/zip: row_undo_ins_parse_undo_rec(): Initialize node->update · 35d020df
      marko authored
      so that it will not be uninitialized when the undo record is being
      processed.
      35d020df
    • vasil's avatar
      branches/zip: · 40e01b2f
      vasil authored
       
      Move the column trx_weight near the end in the
      information_schema.innodb_trx table.
      
      Suggested by:	Ken
      Approved by:	Marko
      40e01b2f
  3. 15 Jan, 2008 2 commits
  4. 14 Jan, 2008 3 commits
  5. 11 Jan, 2008 3 commits
    • marko's avatar
      branches/zip: Clarify why certain calls of · 952b0e7f
      marko authored
      btr_rec_copy_externally_stored_field() are safe.
      
      row_merge_copy_blobs(): Note that the table is locked during index creation.
      Therefore, none of its BLOBs can be freed.
      
      row_sel_fetch_columns(): Note that rec must be protected by a page latch.
      Add const qualifier to rec.
      
      row_sel_get_clust_rec(): Note that the clustered index record is protected
      by a page latch that was acquired when the persistent cursor was positioned
      and that the latch will be freed by mini-transaction commit.
      
      row_sel_try_search_shortcut(): Check the delete-mark flag before fetching
      the columns.  Note that the clustered index record is protected
      by a page latch that was acquired when the persistent cursor was positioned
      and that the latch will be freed by mini-transaction commit.
      
      row_sel(), row_search_for_mysql(): Note that the clustered index record
      is protected by a page latch that was acquired when the persistent cursor
      was positioned and that the latch will be freed by mini-transaction commit.
      
      row_sel_field_store_in_mysql_format(): Add const qualifier to data.
      
      row_sel_store_mysql_rec(), row_sel_push_cache_row_for_mysql():
      Add const qualifier to rec.  Note that rec must be protected by a page latch.
      952b0e7f
    • marko's avatar
    • marko's avatar
      branches/zip: Add clarifying comments that the clustered index record must · 31e200da
      marko authored
      be protected from being deleted while any externally stored columns are
      being fetched.
      
      row_ext_create(),
      row_upd_index_replace_new_col_vals(),
      row_upd_index_replace_new_col_vals_index_pos(),
      row_sel_sec_rec_is_for_blob(),
      row_sel_sec_rec_is_for_clust_rec(): Note that the clustered
      index record must be covered by a lock or a page latch.
      
      row_upd_sec_index_entry(), row_upd_clust_rec_by_insert(),
      row_undo_mod_upd_exist_sec(): Note that these functions probably
      do not obtain an appropriate lock on the clustered index record
      before fetching any externally stored columns.
      31e200da
  6. 10 Jan, 2008 4 commits
    • marko's avatar
      branches/zip: buf_LRU_search_and_free_block(): Do not forbid the release · e8574ccb
      marko authored
      of the buffer pool mutex.  Apparently, it is temporarily released also
      in older versions of MySQL/InnoDB for the duration of the
      btr_search_drop_page_hash_index() call [in buf_LRU_free_block()].
      e8574ccb
    • marko's avatar
      3aa12b72
    • marko's avatar
      branches/zip: Add instrumentation for prohibiting the release of · 523a8a0e
      marko authored
      the buffer pool mutex.  The instrumentation can be activated by
      defining UNIV_DEBUG or UNIV_BUF_DEBUG at compilation time.
      
      buf_pool_mutex_exit_forbidden: New variable.  When this is nonzero,
      an assertion will fail in buf_pool_mutex_exit().
      
      buf_pool_mutex_exit_forbid(): Macro for declaring that the buffer pool
      mutex must not be released.  Calls may be nested.
      
      buf_pool_mutex_exit_allow(): Macro for declaring that the buffer pool
      mutex may be released.  Calls may be nested.
      
      buf_LRU_search_and_free_block(): Prohibit buf_pool_mutex_exit() in the
      scope of the function.
      
      buf_LRU_free_block(): Prohibit buf_pool_mutex_exit() in buf_buddy_alloc()
      and buf_buddy_free().
      
      buf_LRU_block_remove_hashed_page(): Prohibit buf_pool_mutex_exit()
      in buf_buddy_free().
      523a8a0e
    • marko's avatar
      branches/zip: Implement wrappers for all operations on the buffer pool mutex. · 3bb40584
      marko authored
      buf_pool->mutex: Rename to buf_pool_mutex, so that the wrappers will have
      to be used when changes are merged from other source trees.
      
      buf_pool->zip_mutex: Rename to buf_pool_zip_mutex.
      
      buf_pool_mutex_own(), buf_pool_mutex_enter(), buf_pool_mutex_exit():
      Wrappers for buf_pool_mutex.
      3bb40584
  7. 09 Jan, 2008 1 commit
    • marko's avatar
      branches/zip: Clean up index->to_be_dropped after a failed DROP INDEX. · 09342d57
      marko authored
      ha_innobase::final_drop_index(): If row_merge_drop_table() fails, clear
      the to_be_dropped flags.  This was the error fixed in this commit; the rest
      is just additional safety.
      
      ha_innobase::final_drop_index(): After dropping the flagged indexes,
      assert that none of the remaining indexes are flagged to_be_dropped.
      
      ha_innobase::prepare_drop_index(): Assert that no index has been flagged
      for deletion.  When checking foreign key constraints, simply traverse the
      list of indexes and check if any of the indexes that were just flagged
      to_be_dropped.  On error, clear the to_be_dropped flags with simple list
      traversal.
      09342d57
  8. 07 Jan, 2008 2 commits
  9. 04 Jan, 2008 4 commits
  10. 03 Jan, 2008 2 commits
  11. 20 Dec, 2007 7 commits
    • marko's avatar
      branches/zip: Allow a build with UNIV_PAGE_SIZE set to 4096. · 8a882081
      marko authored
      TRX_RSEG_N_SLOTS: Make the definition dependent of UNIV_PAGE_SIZE.
      
      FSP_EXTENT_SIZE: Define as 1 megabyte, as assumed by the code elsewhere.
      
      fseg_create_general(): Add a debug assertion against page overflow.
      8a882081
    • marko's avatar
      branches/zip: Fix some things to allow InnoDB to be built with smaller · 2a2a53bd
      marko authored
      UNIV_PAGE_SIZE than the default 16384.
      
      MEM_BLOCK_STANDARD_SIZE: Cap to MEM_MAX_ALLOC_IN_BUF when UNIV_PAGE_SIZE
      is less than 16384.
      
      ha_create_func(): Invoke mem_heap_create_in_btr_search() with
      ut_min(4096, MEM_MAX_ALLOC_IN_BUF) instead of 4096.  The memory
      will be allocated from the buffer pool, and with UNIV_PAGE_SIZE
      defined to 4096, there would not be any space for the mem_heap
      data structure overhead.
      2a2a53bd
    • vasil's avatar
      branches/zip: · ff9ef522
      vasil authored
      Change the format of TRX_IDs in INFORMATION_SCHEMA tables from DEC to
      HEX.
      
      The current TRX_IDs are hard to remember and track down: 426355, 428466,
      428566, etc.
      
      In HEX:
      * there are less "digits", the strings are shorter;
      * since there are 16 instead of 10 "digits", the chance of having
        repeating ones are smaller.
      
      The above look like 68173, 689B2, 68A16 in HEX.
      
      Discussed with:	Ken
      Approved by:	Heikki (via IM)
      ff9ef522
    • vasil's avatar
      branches/zip: · 74ac13f0
      vasil authored
      Change the output format of transaction ids from 2 32bit numbers separated
      by space to a single hex number.
      
      Suggested by:	Heikki
      Approved by:	Heikki
      74ac13f0
    • marko's avatar
      branches/zip: trx0sys.h: Add a compile-time check that UNIV_PAGE_SIZE · 81b55378
      marko authored
      is at least 4 kilobytes.
      81b55378
    • marko's avatar
      branches/zip: Allow the uncompressed page size to be settable by setting · cd353a2b
      marko authored
      just one parameter: UNIV_PAGE_SIZE_SHIFT.
      
      UNIV_PAGE_SIZE, BUF_BUDDY_SIZES: Define in terms of UNIV_PAGE_SIZE_SHIFT.
      
      BUF_BUDDY_LOW_SHIFT: New macro, to simplify the definition of BUF_BUDDY_LOW
      and BUF_BUDDY_SIZES.
      
      PAGE_ZIP_DIR_SLOT_MASK: Relax the compile-time check.  This bitmask must be
      one less than a power of two, and at least UNIV_PAGE_SIZE - 1.
      cd353a2b
    • marko's avatar
      branches/zip: Add some clarifying comments. · 7696aaf8
      marko authored
      btr_copy_blob_prefix(), btr_copy_externally_stored_field_prefix_low():
      Document the return value as "number of bytes written", not "bytes written".
      
      trx_undo_page_fetch_ext(): Explain the assertion ut_a(ext_len).
      
      row_build_index_entry(): Explain the assertion ut_a(!ext).
      7696aaf8
  12. 19 Dec, 2007 4 commits
    • marko's avatar
      branches/zip: Minor cleanup. · d35922d1
      marko authored
      row_create_index_graph_for_mysql(): Move from row0mysql.c to row0merge.c
      and rename to row_merge_create_index_graph().  Also change the function
      comment to say that the function will create and execute the query graph
      for creating the index.
      
      row_merge_create_index(): Remove redundant assignment to trx->error_state.
      d35922d1
    • marko's avatar
      branches/zip: Fast index creation: Lock the data dictionary only after · e3d19b0f
      marko authored
      acquiring the table lock.  The data dictionary should not be locked for
      long periods.  Before this change, in the worst case, the dictionary
      would be locked until the expiration of innodb_lock_wait_timeout.
      
      Virtually, transaction-level locks (locks on database objects, such
      as records and tables) have a latching order level of SYNC_USER_TRX_LOCK,
      which is above any InnoDB rw-locks or mutexes.  However, the latching
      order of SYNC_USER_TRX_LOCK is never checked, not even by UNIV_SYNC_DEBUG.
      
      ha_innobase::add_index(), ha_innobase::final_drop_index(): Invoke
      row_mysql_lock_data_dictionary(trx) only after row_merge_lock_table().
      e3d19b0f
    • marko's avatar
      branches/zip: Implement a limit for the size of undo log records. · 463141d1
      marko authored
      innodb-index.test: Add a test with a large number of externally stored
      columns.  Check that there may not be prefix indexes on too many columns.
      
      dict_index_too_big_for_undo(): New function: Check if the undo log may
      overflow.
      
      dict_index_add_to_cache(): Return DB_SUCCESS or DB_TOO_BIG_RECORD.
      Postpone the creation and linking of some data structures, so that
      when dict_index_too_big_for_undo() holds, it will be easier to clean up.
      Check the return status in all callers.
      463141d1
    • marko's avatar
      branches/zip: dict0dict.c: Minor cleanup. · b33d8c40
      marko authored
      dict_index_copy(): Remove the prototype, because this static function
      will be defined before its first use.  Add const qualifier to "table".
      
      dict_index_build_internal_clust(), dict_index_build_internal_non_clust():
      Add const qualifier to "table".  Correct the comment about setting indexed[].
      b33d8c40