1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-07 17:42:39 +03:00
Files
mariadb/mysql-test/suite/innodb/r/innodb_status_variables.result
Marko Mäkelä a55b951e60 MDEV-26827 Make page flushing even faster
For more convenient monitoring of something that could greatly affect
the volume of page writes, we add the status variable
Innodb_buffer_pool_pages_split that was previously only available
via information_schema.innodb_metrics as "innodb_page_splits".
This was suggested by Axel Schwenke.

buf_flush_page_count: Replaced with buf_pool.stat.n_pages_written.
We protect buf_pool.stat (except n_page_gets) with buf_pool.mutex
and remove unnecessary export_vars indirection.

buf_pool.flush_list_bytes: Moved from buf_pool.stat.flush_list_bytes.
Protected by buf_pool.flush_list_mutex.

buf_pool_t::page_cleaner_status: Replaces buf_pool_t::n_flush_LRU_,
buf_pool_t::n_flush_list_, and buf_pool_t::page_cleaner_is_idle.
Protected by buf_pool.flush_list_mutex. We will exclusively broadcast
buf_pool.done_flush_list by the buf_flush_page_cleaner thread,
and only wait for it when communicating with buf_flush_page_cleaner.
There is no need to keep a count of pending writes by the
buf_pool.flush_list processing. A single flag suffices for that.

Waits for page write completion can be performed by
simply waiting on block->page.lock, or by invoking
buf_dblwr.wait_for_page_writes().

buf_LRU_block_free_non_file_page(): Broadcast buf_pool.done_free and
set buf_pool.try_LRU_scan when freeing a page. This would be
executed also as part of buf_page_write_complete().

buf_page_write_complete(): Do not broadcast buf_pool.done_flush_list,
and do not acquire buf_pool.mutex unless buf_pool.LRU eviction is needed.
Let buf_dblwr count all writes to persistent pages and broadcast a
condition variable when no outstanding writes remain.

buf_flush_page_cleaner(): Prioritize LRU flushing and eviction right after
"furious flushing" (lsn_limit). Simplify the conditions and reduce the
hold time of buf_pool.flush_list_mutex. Refuse to shut down
or sleep if buf_pool.ran_out(), that is, LRU eviction is needed.

buf_pool_t::page_cleaner_wakeup(): Add the optional parameter for_LRU.

buf_LRU_get_free_block(): Protect buf_lru_free_blocks_error_printed
with buf_pool.mutex. Invoke buf_pool.page_cleaner_wakeup(true) to
to ensure that buf_flush_page_cleaner() will process the LRU flush
request.

buf_do_LRU_batch(), buf_flush_list(), buf_flush_list_space():
Update buf_pool.stat.n_pages_written when submitting writes
(while holding buf_pool.mutex), not when completing them.

buf_page_t::flush(), buf_flush_discard_page(): Require that
the page U-latch be acquired upfront, and remove
buf_page_t::ready_for_flush().

buf_pool_t::delete_from_flush_list(): Remove the parameter "bool clear".

buf_flush_page(): Count pending page writes via buf_dblwr.

buf_flush_try_neighbors(): Take the block of page_id as a parameter.
If the tablespace is dropped before our page has been written out,
release the page U-latch.

buf_pool_invalidate(): Let the caller ensure that there are no
outstanding writes.

buf_flush_wait_batch_end(false),
buf_flush_wait_batch_end_acquiring_mutex(false):
Replaced with buf_dblwr.wait_for_page_writes().

buf_flush_wait_LRU_batch_end(): Replaces buf_flush_wait_batch_end(true).

buf_flush_list(): Remove some broadcast of buf_pool.done_flush_list.

buf_flush_buffer_pool(): Invoke also buf_dblwr.wait_for_page_writes().

buf_pool_t::io_pending(), buf_pool_t::n_flush_list(): Remove.
Outstanding writes are reflected by buf_dblwr.pending_writes().

buf_dblwr_t::init(): New function, to initialize the mutex and
the condition variables, but not the backing store.

buf_dblwr_t::is_created(): Replaces buf_dblwr_t::is_initialised().

buf_dblwr_t::pending_writes(), buf_dblwr_t::writes_pending:
Keeps track of writes of persistent data pages.

buf_flush_LRU(): Allow calls while LRU flushing may be in progress
in another thread.

Tested by Matthias Leich (correctness) and Axel Schwenke (performance)
2023-03-16 17:19:58 +02:00

127 lines
3.6 KiB
Plaintext

SELECT variable_name FROM information_schema.global_status
WHERE variable_name LIKE 'INNODB_%'
AND variable_name NOT IN
('INNODB_ADAPTIVE_HASH_HASH_SEARCHES','INNODB_ADAPTIVE_HASH_NON_HASH_SEARCHES',
'INNODB_MEM_ADAPTIVE_HASH',
'INNODB_BUFFERED_AIO_SUBMITTED','INNODB_BUFFER_POOL_PAGES_LATCHED');
variable_name
INNODB_BACKGROUND_LOG_SYNC
INNODB_BUFFER_POOL_DUMP_STATUS
INNODB_BUFFER_POOL_LOAD_STATUS
INNODB_BUFFER_POOL_RESIZE_STATUS
INNODB_BUFFER_POOL_LOAD_INCOMPLETE
INNODB_BUFFER_POOL_PAGES_DATA
INNODB_BUFFER_POOL_BYTES_DATA
INNODB_BUFFER_POOL_PAGES_DIRTY
INNODB_BUFFER_POOL_BYTES_DIRTY
INNODB_BUFFER_POOL_PAGES_FLUSHED
INNODB_BUFFER_POOL_PAGES_FREE
INNODB_BUFFER_POOL_PAGES_MADE_NOT_YOUNG
INNODB_BUFFER_POOL_PAGES_MADE_YOUNG
INNODB_BUFFER_POOL_PAGES_MISC
INNODB_BUFFER_POOL_PAGES_OLD
INNODB_BUFFER_POOL_PAGES_TOTAL
INNODB_BUFFER_POOL_PAGES_LRU_FLUSHED
INNODB_BUFFER_POOL_PAGES_LRU_FREED
INNODB_BUFFER_POOL_PAGES_SPLIT
INNODB_BUFFER_POOL_READ_AHEAD_RND
INNODB_BUFFER_POOL_READ_AHEAD
INNODB_BUFFER_POOL_READ_AHEAD_EVICTED
INNODB_BUFFER_POOL_READ_REQUESTS
INNODB_BUFFER_POOL_READS
INNODB_BUFFER_POOL_WAIT_FREE
INNODB_BUFFER_POOL_WRITE_REQUESTS
INNODB_CHECKPOINT_AGE
INNODB_CHECKPOINT_MAX_AGE
INNODB_DATA_FSYNCS
INNODB_DATA_PENDING_FSYNCS
INNODB_DATA_PENDING_READS
INNODB_DATA_PENDING_WRITES
INNODB_DATA_READ
INNODB_DATA_READS
INNODB_DATA_WRITES
INNODB_DATA_WRITTEN
INNODB_DBLWR_PAGES_WRITTEN
INNODB_DBLWR_WRITES
INNODB_DEADLOCKS
INNODB_HISTORY_LIST_LENGTH
INNODB_IBUF_DISCARDED_DELETE_MARKS
INNODB_IBUF_DISCARDED_DELETES
INNODB_IBUF_DISCARDED_INSERTS
INNODB_IBUF_FREE_LIST
INNODB_IBUF_MERGED_DELETE_MARKS
INNODB_IBUF_MERGED_DELETES
INNODB_IBUF_MERGED_INSERTS
INNODB_IBUF_MERGES
INNODB_IBUF_SEGMENT_SIZE
INNODB_IBUF_SIZE
INNODB_LOG_WAITS
INNODB_LOG_WRITE_REQUESTS
INNODB_LOG_WRITES
INNODB_LSN_CURRENT
INNODB_LSN_FLUSHED
INNODB_LSN_LAST_CHECKPOINT
INNODB_MASTER_THREAD_ACTIVE_LOOPS
INNODB_MASTER_THREAD_IDLE_LOOPS
INNODB_MAX_TRX_ID
INNODB_MEM_DICTIONARY
INNODB_OS_LOG_FSYNCS
INNODB_OS_LOG_PENDING_FSYNCS
INNODB_OS_LOG_PENDING_WRITES
INNODB_OS_LOG_WRITTEN
INNODB_PAGE_SIZE
INNODB_PAGES_CREATED
INNODB_PAGES_READ
INNODB_PAGES_WRITTEN
INNODB_ROW_LOCK_CURRENT_WAITS
INNODB_ROW_LOCK_TIME
INNODB_ROW_LOCK_TIME_AVG
INNODB_ROW_LOCK_TIME_MAX
INNODB_ROW_LOCK_WAITS
INNODB_ROWS_DELETED
INNODB_ROWS_INSERTED
INNODB_ROWS_READ
INNODB_ROWS_UPDATED
INNODB_SYSTEM_ROWS_DELETED
INNODB_SYSTEM_ROWS_INSERTED
INNODB_SYSTEM_ROWS_READ
INNODB_SYSTEM_ROWS_UPDATED
INNODB_NUM_OPEN_FILES
INNODB_TRUNCATED_STATUS_WRITES
INNODB_AVAILABLE_UNDO_LOGS
INNODB_UNDO_TRUNCATIONS
INNODB_PAGE_COMPRESSION_SAVED
INNODB_NUM_PAGES_PAGE_COMPRESSED
INNODB_NUM_PAGE_COMPRESSED_TRIM_OP
INNODB_NUM_PAGES_PAGE_DECOMPRESSED
INNODB_NUM_PAGES_PAGE_COMPRESSION_ERROR
INNODB_NUM_PAGES_ENCRYPTED
INNODB_NUM_PAGES_DECRYPTED
INNODB_HAVE_LZ4
INNODB_HAVE_LZO
INNODB_HAVE_LZMA
INNODB_HAVE_BZIP2
INNODB_HAVE_SNAPPY
INNODB_HAVE_PUNCH_HOLE
INNODB_DEFRAGMENT_COMPRESSION_FAILURES
INNODB_DEFRAGMENT_FAILURES
INNODB_DEFRAGMENT_COUNT
INNODB_INSTANT_ALTER_COLUMN
INNODB_ONLINEDDL_ROWLOG_ROWS
INNODB_ONLINEDDL_ROWLOG_PCT_USED
INNODB_ONLINEDDL_PCT_PROGRESS
INNODB_SECONDARY_INDEX_TRIGGERED_CLUSTER_READS
INNODB_SECONDARY_INDEX_TRIGGERED_CLUSTER_READS_AVOIDED
INNODB_ENCRYPTION_ROTATION_PAGES_READ_FROM_CACHE
INNODB_ENCRYPTION_ROTATION_PAGES_READ_FROM_DISK
INNODB_ENCRYPTION_ROTATION_PAGES_MODIFIED
INNODB_ENCRYPTION_ROTATION_PAGES_FLUSHED
INNODB_ENCRYPTION_ROTATION_ESTIMATED_IOPS
INNODB_ENCRYPTION_N_MERGE_BLOCKS_ENCRYPTED
INNODB_ENCRYPTION_N_MERGE_BLOCKS_DECRYPTED
INNODB_ENCRYPTION_N_ROWLOG_BLOCKS_ENCRYPTED
INNODB_ENCRYPTION_N_ROWLOG_BLOCKS_DECRYPTED
INNODB_ENCRYPTION_N_TEMP_BLOCKS_ENCRYPTED
INNODB_ENCRYPTION_N_TEMP_BLOCKS_DECRYPTED
INNODB_ENCRYPTION_NUM_KEY_REQUESTS