diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 1a65c5f..57c18ae 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -15585,11 +15585,15 @@ ha_innobase::external_lock( } else if (trx->isolation_level <= TRX_ISO_READ_COMMITTED && MVCC::is_view_active(trx->read_view)) { - mutex_enter(&trx_sys->mutex); + if (trx->read_only || trx->rsegs.m_redo.rseg == NULL) { + trx_sys->mvcc->view_close(trx->read_view, false); + } else { + mutex_enter(&trx_sys->mutex); - trx_sys->mvcc->view_close(trx->read_view, true); + trx_sys->mvcc->view_close(trx->read_view, true); - mutex_exit(&trx_sys->mutex); + mutex_exit(&trx_sys->mutex); + } } } @@ -16251,12 +16255,15 @@ ha_innobase::store_lock( /* At low transaction isolation levels we let each consistent read set its own snapshot */ + if (trx->read_only || trx->rsegs.m_redo.rseg == NULL) { + trx_sys->mvcc->view_close(trx->read_view, false); + } else { + mutex_enter(&trx_sys->mutex); - mutex_enter(&trx_sys->mutex); - - trx_sys->mvcc->view_close(trx->read_view, true); + trx_sys->mvcc->view_close(trx->read_view, true); - mutex_exit(&trx_sys->mutex); + mutex_exit(&trx_sys->mutex); + } } }