polardbxengine/mysql-test/suite/innodb/t/pct_cached_evict.test

81 lines
2.6 KiB
Plaintext

#
# Confirm that evicting a page from the buffer pool accounts it correctly
# in the stats for how much pages per index are cached.
#
let $get_n_cached_pages=
SELECT cached.n_cached_pages AS n_cached_pages
FROM
information_schema.innodb_cached_indexes AS cached,
information_schema.innodb_indexes AS indexes,
information_schema.innodb_tables AS tables
WHERE
cached.index_id = indexes.index_id
AND cached.space_id = indexes.space
AND indexes.table_id = tables.table_id
AND tables.name LIKE '%pct_cached_evict';
CREATE TABLE pct_cached_evict (a TEXT) ENGINE=INNODB;
-- disable_query_log
-- echo # Populating pct_cached_evict with a few pages
BEGIN;
-- let $i = 64
while ($i)
{
INSERT INTO pct_cached_evict VALUES (REPEAT('a', 1024));
dec $i;
}
COMMIT;
-- enable_query_log
-- let $before_evict = `$get_n_cached_pages`
-- source suite/innodb/include/evict_everything_from_buffer_pool.inc
-- let $after_evict = `$get_n_cached_pages`
if ($before_evict > $after_evict)
{
# Decreased.
-- echo OK
}
if ($before_evict <= $after_evict)
{
# Sometimes evict_everything_from_buffer_pool.inc does not evict
# the pages of pct_cached_evict from the buffer pool. In this
# sporadic case we just pretend everything is OK.
-- let $actual = `SELECT COUNT(*) FROM information_schema.innodb_buffer_page WHERE table_name LIKE '%pct_cached_evict%'`
if ($actual == $after_evict)
{
-- echo OK
}
if ($actual != $after_evict)
{
-- echo The reported number of cached pages of pct_cached_evict did not decrease, dumping some data to help analysis.
-- echo Pages of pct_cached_evict before evict: $before_evict
-- echo Pages of pct_cached_evict after evict: $after_evict
-- echo Actual number of pages of pct_cached_evict after evict from innodb_buffer_page: $actual
SELECT
tables.name AS table_name,
indexes.name AS index_name,
cached.n_cached_pages AS n_cached_pages
FROM
information_schema.innodb_cached_indexes AS cached,
information_schema.innodb_indexes AS indexes,
information_schema.innodb_tables AS tables
WHERE
cached.index_id = indexes.index_id
AND cached.space_id = indexes.space
AND indexes.table_id = tables.table_id;
SELECT * FROM information_schema.innodb_buffer_page;
SELECT * FROM information_schema.innodb_buffer_pool_stats;
}
}
DROP TABLE pct_cached_evict;