mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
b8b6c7fcf7
Fixes the following bugs: - Bug #33349: possible race condition revolving around data dictionary and repartitioning Introduce retry/sleep logic as a workaround for a transient bug where ::open fails for partitioned tables randomly if we are using one file per table. - Bug #34053: normal users can enable innodb_monitor logging In CREATE TABLE and DROP TABLE check whether the table in question is one of the magic innodb_monitor tables and whether the user has enough rights to mess with it before doing anything else. - Bug #22868: 'Thread thrashing' with > 50 concurrent conns under an upd-intensive workloadw - Bug #29560: InnoDB >= 5.0.30 hangs on adaptive hash rw-lock 'waiting for an X-lock' This is a combination of changes that forward port the scalability fix applied to 5.0 through r1001. It reverts changes r149 and r122 (these were 5.1 specific changes made in lieu of scalability fix of 5.0) Then it applies r1001 to 5.0 which is the original scalability fix. Finally it applies r2082 which fixes an issue with the original fix. - Bug #30930: Add auxiliary function to retrieve THD::thread_id Add thd_get_thread_id() function. Also make check_global_access() function visible to InnoDB under INNODB_COMPATIBILITY_HOOKS #define.
165 lines
5.6 KiB
C
165 lines
5.6 KiB
C
/******************************************************
|
|
Cursor read
|
|
|
|
(c) 1997 Innobase Oy
|
|
|
|
Created 2/16/1997 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
#ifndef read0read_h
|
|
#define read0read_h
|
|
|
|
#include "univ.i"
|
|
|
|
|
|
#include "ut0byte.h"
|
|
#include "ut0lst.h"
|
|
#include "trx0trx.h"
|
|
#include "read0types.h"
|
|
|
|
/*************************************************************************
|
|
Opens a read view where exactly the transactions serialized before this
|
|
point in time are seen in the view. */
|
|
|
|
read_view_t*
|
|
read_view_open_now(
|
|
/*===============*/
|
|
/* out, own: read view struct */
|
|
dulint cr_trx_id, /* in: trx_id of creating
|
|
transaction, or (0, 0) used in
|
|
purge */
|
|
mem_heap_t* heap); /* in: memory heap from which
|
|
allocated */
|
|
/*************************************************************************
|
|
Makes a copy of the oldest existing read view, or opens a new. The view
|
|
must be closed with ..._close. */
|
|
|
|
read_view_t*
|
|
read_view_oldest_copy_or_open_new(
|
|
/*==============================*/
|
|
/* out, own: read view struct */
|
|
dulint cr_trx_id, /* in: trx_id of creating
|
|
transaction, or (0, 0) used in
|
|
purge */
|
|
mem_heap_t* heap); /* in: memory heap from which
|
|
allocated */
|
|
/*************************************************************************
|
|
Closes a read view. */
|
|
|
|
void
|
|
read_view_close(
|
|
/*============*/
|
|
read_view_t* view); /* in: read view */
|
|
/*************************************************************************
|
|
Closes a consistent read view for MySQL. This function is called at an SQL
|
|
statement end if the trx isolation level is <= TRX_ISO_READ_COMMITTED. */
|
|
|
|
void
|
|
read_view_close_for_mysql(
|
|
/*======================*/
|
|
trx_t* trx); /* in: trx which has a read view */
|
|
/*************************************************************************
|
|
Checks if a read view sees the specified transaction. */
|
|
UNIV_INLINE
|
|
ibool
|
|
read_view_sees_trx_id(
|
|
/*==================*/
|
|
/* out: TRUE if sees */
|
|
read_view_t* view, /* in: read view */
|
|
dulint trx_id);/* in: trx id */
|
|
/*************************************************************************
|
|
Prints a read view to stderr. */
|
|
|
|
void
|
|
read_view_print(
|
|
/*============*/
|
|
read_view_t* view); /* in: read view */
|
|
/*************************************************************************
|
|
Create a consistent cursor view for mysql to be used in cursors. In this
|
|
consistent read view modifications done by the creating transaction or future
|
|
transactions are not visible. */
|
|
|
|
cursor_view_t*
|
|
read_cursor_view_create_for_mysql(
|
|
/*==============================*/
|
|
trx_t* cr_trx);/* in: trx where cursor view is created */
|
|
/*************************************************************************
|
|
Close a given consistent cursor view for mysql and restore global read view
|
|
back to a transaction read view. */
|
|
|
|
void
|
|
read_cursor_view_close_for_mysql(
|
|
/*=============================*/
|
|
trx_t* trx, /* in: trx */
|
|
cursor_view_t* curview); /* in: cursor view to be closed */
|
|
/*************************************************************************
|
|
This function sets a given consistent cursor view to a transaction
|
|
read view if given consistent cursor view is not NULL. Otherwise, function
|
|
restores a global read view to a transaction read view. */
|
|
|
|
void
|
|
read_cursor_set_for_mysql(
|
|
/*======================*/
|
|
trx_t* trx, /* in: transaction where cursor is set */
|
|
cursor_view_t* curview);/* in: consistent cursor view to be set */
|
|
|
|
/* Read view lists the trx ids of those transactions for which a consistent
|
|
read should not see the modifications to the database. */
|
|
|
|
struct read_view_struct{
|
|
ulint type; /* VIEW_NORMAL, VIEW_HIGH_GRANULARITY */
|
|
dulint undo_no; /* (0, 0) or if type is VIEW_HIGH_GRANULARITY
|
|
transaction undo_no when this high-granularity
|
|
consistent read view was created */
|
|
dulint low_limit_no; /* The view does not need to see the undo
|
|
logs for transactions whose transaction number
|
|
is strictly smaller (<) than this value: they
|
|
can be removed in purge if not needed by other
|
|
views */
|
|
dulint low_limit_id; /* The read should not see any transaction
|
|
with trx id >= this value */
|
|
dulint up_limit_id; /* The read should see all trx ids which
|
|
are strictly smaller (<) than this value */
|
|
ulint n_trx_ids; /* Number of cells in the trx_ids array */
|
|
dulint* trx_ids; /* Additional trx ids which the read should
|
|
not see: typically, these are the active
|
|
transactions at the time when the read is
|
|
serialized, except the reading transaction
|
|
itself; the trx ids in this array are in a
|
|
descending order */
|
|
dulint creator_trx_id; /* trx id of creating transaction, or
|
|
(0, 0) used in purge */
|
|
UT_LIST_NODE_T(read_view_t) view_list;
|
|
/* List of read views in trx_sys */
|
|
};
|
|
|
|
/* Read view types */
|
|
#define VIEW_NORMAL 1 /* Normal consistent read view
|
|
where transaction does not see changes
|
|
made by active transactions except
|
|
creating transaction. */
|
|
#define VIEW_HIGH_GRANULARITY 2 /* High-granularity read view where
|
|
transaction does not see changes
|
|
made by active transactions and own
|
|
changes after a point in time when this
|
|
read view was created. */
|
|
|
|
/* Implement InnoDB framework to support consistent read views in
|
|
cursors. This struct holds both heap where consistent read view
|
|
is allocated and pointer to a read view. */
|
|
|
|
struct cursor_view_struct{
|
|
mem_heap_t* heap;
|
|
/* Memory heap for the cursor view */
|
|
read_view_t* read_view;
|
|
/* Consistent read view of the cursor*/
|
|
ulint n_mysql_tables_in_use;
|
|
/* number of Innobase tables used in the
|
|
processing of this cursor */
|
|
};
|
|
|
|
#ifndef UNIV_NONINL
|
|
#include "read0read.ic"
|
|
#endif
|
|
|
|
#endif
|