From: Alexander Nozdrin Date: March 9 2011 7:16pm Subject: bzr commit into mysql-trunk branch (alexander.nozdrin:3730) Bug#11765850 List-Archive: http://lists.mysql.com/commits/132709 X-Bug: 11765850 Message-Id: <201103091917.p29HTDrM023583@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9134986831663575514==" --===============9134986831663575514== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/alik/MySQL/bzr/mysql-5.6.2-m5-release/ based on revid:alexander.nozdrin@stripped 3730 Alexander Nozdrin 2011-03-09 Cherry-picking merge from mysql-trunk-innodb. Original revision: ###################################################### revno: 3528 revision-id: sunny.bains@stripped parent: vasil.dimov@stripped committer: Sunny Bains branch nick: trunk timestamp: Thu 2011-03-03 10:09:09 +1100 message: Bug# 11765850 - 58854: HIGH CONCURRENCY SYSTEM TEST SHOWS SIGNIFICANT PERFORMANCE DROP The bug is that the InnoDB pre-fetch cache was not being used in row_search_for_mysql(). Secondly the changeset that planted the bug also introduced some inefficient code. It would read an extra row, convert it to MySQL row format (for ICP==off), copy the row to the pre-fetch cache row buffer, then check for cache overflow and dequeue the row that was pushed if there was a possibility of a cache overflow. No rb entry, approved via email by Marko. ###################################################### modified: storage/innobase/row/row0sel.c === modified file 'storage/innobase/row/row0sel.c' --- a/storage/innobase/row/row0sel.c 2011-02-07 11:23:17 +0000 +++ b/storage/innobase/row/row0sel.c 2011-03-09 19:16:29 +0000 @@ -3276,16 +3276,15 @@ row_sel_pop_cached_row_for_mysql( } /********************************************************************//** -Pushes a row for MySQL to the fetch cache. -@return TRUE on success, FALSE if the record contains incomplete BLOBs */ -UNIV_INLINE __attribute__((warn_unused_result)) -ibool +Pushes a row for MySQL to the fetch cache. */ +UNIV_INLINE +void row_sel_push_cache_row_for_mysql( /*=============================*/ byte* mysql_rec, /*!< in/out: MySQL record */ row_prebuilt_t* prebuilt) /*!< in/out: prebuilt struct */ { - ut_ad(prebuilt->n_fetch_cached < MYSQL_FETCH_CACHE_SIZE); + ut_a(prebuilt->n_fetch_cached < MYSQL_FETCH_CACHE_SIZE); ut_a(!prebuilt->templ_contains_blob); if (UNIV_UNLIKELY(prebuilt->fetch_cache[0] == NULL)) { @@ -3317,12 +3316,7 @@ row_sel_push_cache_row_for_mysql( memcpy(prebuilt->fetch_cache[prebuilt->n_fetch_cached], mysql_rec, prebuilt->mysql_row_len); - if (++prebuilt->n_fetch_cached < MYSQL_FETCH_CACHE_SIZE) { - return(FALSE); - } - - row_sel_pop_cached_row_for_mysql(mysql_rec, prebuilt); - return(TRUE); + ++prebuilt->n_fetch_cached; } /*********************************************************************//** @@ -4650,12 +4644,18 @@ requires_clust_rec: not cache rows because there the cursor is a scrollable cursor. */ + ut_a(prebuilt->n_fetch_cached < MYSQL_FETCH_CACHE_SIZE); + + /* We only convert from InnoDB row format to MySQL row + format when ICP is disabled. */ + if (!prebuilt->idx_cond && !row_sel_store_mysql_rec( buf, prebuilt, result_rec, result_rec != rec, result_rec != rec ? clust_index : index, offsets)) { + /* Only fresh inserts may contain incomplete externally stored columns. Pretend that such records do not exist. Such records may only be @@ -4664,7 +4664,11 @@ requires_clust_rec: transaction. Rollback happens at a lower level, not here. */ goto next_rec; - } else if (row_sel_push_cache_row_for_mysql(buf, prebuilt)) { + } + + row_sel_push_cache_row_for_mysql(buf, prebuilt); + + if (prebuilt->n_fetch_cached < MYSQL_FETCH_CACHE_SIZE) { goto next_rec; } } else { --===============9134986831663575514== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/alexander.nozdrin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexander.nozdrin@stripped\ # 6hufbu46jqhnus8k # target_branch: file:///home/alik/MySQL/bzr/mysql-5.6.2-m5-release/ # testament_sha1: cf0523a0bbfc15cefe0596cfb42764ac93302e06 # timestamp: 2011-03-09 22:16:35 +0300 # source_branch: file:///home/alik/MySQL/bzr/mysql-5.5.10-release/ # base_revision_id: alexander.nozdrin@stripped\ # 0drmlsq3hhdpol80 # # Begin bundle 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 FCQbrclCQA== --===============9134986831663575514==--