Merge lp://qastaging/~vlad-lesin/percona-server/5.6-logical-readahead into lp://qastaging/percona-server/5.6
Status: | Rejected |
---|---|
Rejected by: | Laurynas Biveinis |
Proposed branch: | lp://qastaging/~vlad-lesin/percona-server/5.6-logical-readahead |
Merge into: | lp://qastaging/percona-server/5.6 |
Diff against target: |
2278 lines (+1520/-71) 40 files modified
client/client_priv.h (+4/-1) client/mysqldump.c (+38/-0) mysql-test/include/have_native_aio.inc (+6/-0) mysql-test/suite/innodb/r/innodb_logical_read_ahead.result (+47/-0) mysql-test/suite/innodb/r/innodb_logical_read_ahead_correctness.result (+88/-0) mysql-test/suite/innodb/r/innodb_merge_read.result (+30/-0) mysql-test/suite/innodb/t/innodb_logical_read_ahead-master.opt (+2/-0) mysql-test/suite/innodb/t/innodb_logical_read_ahead.test (+55/-0) mysql-test/suite/innodb/t/innodb_logical_read_ahead_correctness-master.opt (+2/-0) mysql-test/suite/innodb/t/innodb_logical_read_ahead_correctness.test (+107/-0) mysql-test/suite/innodb/t/innodb_merge_read-master.opt (+1/-0) mysql-test/suite/innodb/t/innodb_merge_read.test (+42/-0) mysql-test/suite/sys_vars/r/innodb_lra_n_node_recs_before_sleep_basic.result (+28/-0) mysql-test/suite/sys_vars/r/innodb_lra_size_basic.result (+28/-0) mysql-test/suite/sys_vars/r/innodb_lra_sleep_basic.result (+30/-0) mysql-test/suite/sys_vars/r/innodb_lra_test_basic.result (+8/-0) mysql-test/suite/sys_vars/t/innodb_lra_n_node_recs_before_sleep_basic.test (+14/-0) mysql-test/suite/sys_vars/t/innodb_lra_size_basic-master.opt (+1/-0) mysql-test/suite/sys_vars/t/innodb_lra_size_basic.test (+14/-0) mysql-test/suite/sys_vars/t/innodb_lra_sleep_basic.test (+14/-0) mysql-test/suite/sys_vars/t/innodb_lra_test_basic-master.opt (+1/-0) mysql-test/suite/sys_vars/t/innodb_lra_test_basic.test (+8/-0) storage/innobase/btr/btr0cur.cc (+1/-0) storage/innobase/btr/btr0pcur.cc (+26/-18) storage/innobase/buf/buf0rea.cc (+33/-10) storage/innobase/fil/fil0fil.cc (+8/-3) storage/innobase/handler/ha_innodb.cc (+61/-0) storage/innobase/include/btr0pcur.h (+3/-2) storage/innobase/include/btr0pcur.ic (+51/-17) storage/innobase/include/buf0rea.h (+37/-0) storage/innobase/include/fil0fil.h (+5/-2) storage/innobase/include/os0file.h (+24/-6) storage/innobase/include/os0file.ic (+6/-2) storage/innobase/include/srv0srv.h (+42/-0) storage/innobase/include/trx0trx.h (+96/-1) storage/innobase/os/os0file.cc (+99/-9) storage/innobase/row/row0purge.cc (+9/-0) storage/innobase/row/row0sel.cc (+319/-0) storage/innobase/srv/srv0srv.cc (+9/-0) storage/innobase/trx/trx0trx.cc (+123/-0) |
To merge this branch: | bzr merge lp://qastaging/~vlad-lesin/percona-server/5.6-logical-readahead |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Laurynas Biveinis (community) | Needs Resubmitting | ||
Review via email: mp+216857@code.qastaging.launchpad.net |
Description of the change
Porting logical readahead feature from Facebook branch. The original patches are here:
https:/
https:/
https:/
The main difference is multiple io's commit is enabled only for logical read-ahead in this branch in comparison with the original implementation where it is enabled by default for all operations. See explanation in commit comments.
Jenkins testing:
http://
Unmerged revisions
- 578. By Vlad Lesin
-
Add mysqldump support for logical read ahead
Summary:
Adds options to mysqldump:
--lra-size=X
--lra-sleep=X
--lra-n-node- recs-before- sleep=X These just inject SET statements to set these session variables.
The original implementation is here:
https://github. com/facebook/ mysql-5. 6/commit/ f69a4ea522bce24 e4cdcc7696d5fad 29587cf87a - 577. By Vlad Lesin
-
When the session variable innodb_lra_size is set to N, we issue async
read requests for the next M logical pages where the total size of the M
pages on disk is N megabytes. The max allowed value of innodb_lra_size
is is 16384 which corresponds to prefetching 16GB of data. We may choose
to use smaller values in production.The original implementation can be found here:
https://github. com/facebook/ mysql-5. 6/commit/ f8e361952612d00 979f7cf744f487e 48b15cb5a6 This implementation does not contain code for flashcahe.
- 576. By Vlad Lesin
-
Merge aio page read requests
Summary:
Tries to submit multiple aio page read requests together to improve read
performance.The original code and description can be found here:
https://github. com/facebook/ mysql-5. 6/commit/ f9d1a5332eb2c82 c028638d3b93b5a 3592a69ffa The difference between this and the original implementation is that fil_io()
macros invokes _fil_io() function with enabled io's buffering by default in
the original implementation, it can cause the errors connected with waiting
io finishing just after fil_io() invocation.For example log_archive_do() waits io's finishing on log_sys-
>archive_ lock
mutex, but the mutex is not being unlocked as io's were buffered and
uncommited and io_handler_thread() does not process io's completion in
fil_aio_wait(). Potentially there can be the same errors so io's buffering
is disabled by default and will be enabled only for logical readahead code.
This is not a full review, but addressing this bit can happen in parallel with the rest of the review: the MP needs a blueprint, or even several blueprints, corresponding to each commit (the commits IMHO are well-split). The blueprints must be self-contained.