mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Copy of
commit 184a4a2d82f4f6f3cbcb1015bcdb32bebe73315c Author: Abhinav Sharma <abhinavsharma@fb.com> Date: Thu Sep 14 11:40:08 2017 -0700 Bump rocksdb submodule Summary: Bump rocksdb to include the fix for rocksdb.trx_info_rpl The bug was introduced in: https://github.com/facebook/rocksdb/pull/2850 Fixed in: https://github.com/facebook/rocksdb/pull/2881 update-submodule: rocksdb Reviewed By: lth Differential Revision: D5834658 fbshipit-source-id: d1551bf
This commit is contained in:
@@ -106,6 +106,12 @@ IF (NOT "$ENV{WITH_ZSTD}" STREQUAL "")
|
|||||||
ADD_DEFINITIONS(-DZSTD)
|
ADD_DEFINITIONS(-DZSTD)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
IF (NOT "$ENV{WITH_TBB}" STREQUAL "")
|
||||||
|
SET(rocksdb_static_libs ${rocksdb_static_libs}
|
||||||
|
$ENV{WITH_TBB}/libtbb${PIC_EXT}.a)
|
||||||
|
ADD_DEFINITIONS(-DTBB)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
|
CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
|
||||||
|
|
||||||
IF (HAVE_ZLIB_H)
|
IF (HAVE_ZLIB_H)
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -22,6 +22,7 @@
|
|||||||
/* C++ standard header files */
|
/* C++ standard header files */
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -235,6 +236,12 @@ const char *const RDB_TTL_COL_QUALIFIER = "ttl_col";
|
|||||||
*/
|
*/
|
||||||
#define ROCKSDB_SIZEOF_TTL_RECORD sizeof(longlong)
|
#define ROCKSDB_SIZEOF_TTL_RECORD sizeof(longlong)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Maximum index prefix length in bytes.
|
||||||
|
*/
|
||||||
|
#define MAX_INDEX_COL_LEN_LARGE 3072
|
||||||
|
#define MAX_INDEX_COL_LEN_SMALL 767
|
||||||
|
|
||||||
/*
|
/*
|
||||||
MyRocks specific error codes. NB! Please make sure that you will update
|
MyRocks specific error codes. NB! Please make sure that you will update
|
||||||
HA_ERR_ROCKSDB_LAST when adding new ones. Also update the strings in
|
HA_ERR_ROCKSDB_LAST when adding new ones. Also update the strings in
|
||||||
@@ -293,7 +300,14 @@ struct Rdb_table_handler {
|
|||||||
|
|
||||||
/* Stores cumulative table statistics */
|
/* Stores cumulative table statistics */
|
||||||
my_io_perf_atomic_t m_io_perf_read;
|
my_io_perf_atomic_t m_io_perf_read;
|
||||||
|
my_io_perf_atomic_t m_io_perf_write;
|
||||||
Rdb_atomic_perf_counters m_table_perf_context;
|
Rdb_atomic_perf_counters m_table_perf_context;
|
||||||
|
|
||||||
|
/* Stores cached memtable estimate statistics */
|
||||||
|
std::atomic_uint m_mtcache_lock;
|
||||||
|
uint64_t m_mtcache_count;
|
||||||
|
uint64_t m_mtcache_size;
|
||||||
|
uint64_t m_mtcache_last_update;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Rdb_key_def;
|
class Rdb_key_def;
|
||||||
@@ -360,6 +374,8 @@ struct st_global_stats {
|
|||||||
ib_counter_t<ulonglong, 64, RDB_INDEXER> system_rows[ROWS_MAX];
|
ib_counter_t<ulonglong, 64, RDB_INDEXER> system_rows[ROWS_MAX];
|
||||||
|
|
||||||
ib_counter_t<ulonglong, 64, RDB_INDEXER> queries[QUERIES_MAX];
|
ib_counter_t<ulonglong, 64, RDB_INDEXER> queries[QUERIES_MAX];
|
||||||
|
|
||||||
|
ib_counter_t<ulonglong, 64, RDB_INDEXER> covered_secondary_key_lookups;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Struct used for exporting status to MySQL */
|
/* Struct used for exporting status to MySQL */
|
||||||
@@ -379,6 +395,8 @@ struct st_export_stats {
|
|||||||
|
|
||||||
ulonglong queries_point;
|
ulonglong queries_point;
|
||||||
ulonglong queries_range;
|
ulonglong queries_range;
|
||||||
|
|
||||||
|
ulonglong covered_secondary_key_lookups;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Struct used for exporting RocksDB memory status */
|
/* Struct used for exporting RocksDB memory status */
|
||||||
@@ -387,6 +405,27 @@ struct st_memory_stats {
|
|||||||
ulonglong memtable_unflushed;
|
ulonglong memtable_unflushed;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Struct used for exporting RocksDB IO stalls stats */
|
||||||
|
struct st_io_stall_stats {
|
||||||
|
ulonglong level0_slowdown;
|
||||||
|
ulonglong level0_slowdown_with_compaction;
|
||||||
|
ulonglong level0_numfiles;
|
||||||
|
ulonglong level0_numfiles_with_compaction;
|
||||||
|
ulonglong stop_for_pending_compaction_bytes;
|
||||||
|
ulonglong slowdown_for_pending_compaction_bytes;
|
||||||
|
ulonglong memtable_compaction;
|
||||||
|
ulonglong memtable_slowdown;
|
||||||
|
ulonglong total_stop;
|
||||||
|
ulonglong total_slowdown;
|
||||||
|
|
||||||
|
st_io_stall_stats()
|
||||||
|
: level0_slowdown(0), level0_slowdown_with_compaction(0),
|
||||||
|
level0_numfiles(0), level0_numfiles_with_compaction(0),
|
||||||
|
stop_for_pending_compaction_bytes(0),
|
||||||
|
slowdown_for_pending_compaction_bytes(0), memtable_compaction(0),
|
||||||
|
memtable_slowdown(0), total_stop(0), total_slowdown(0) {}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace myrocks
|
} // namespace myrocks
|
||||||
|
|
||||||
#include "./rdb_buff.h"
|
#include "./rdb_buff.h"
|
||||||
@@ -495,6 +534,12 @@ class ha_rocksdb : public my_core::handler {
|
|||||||
Pointer to the original TTL timestamp value (8 bytes) during UPDATE.
|
Pointer to the original TTL timestamp value (8 bytes) during UPDATE.
|
||||||
*/
|
*/
|
||||||
char m_ttl_bytes[ROCKSDB_SIZEOF_TTL_RECORD];
|
char m_ttl_bytes[ROCKSDB_SIZEOF_TTL_RECORD];
|
||||||
|
/*
|
||||||
|
The TTL timestamp value can change if the explicit TTL column is
|
||||||
|
updated. If we detect this when updating the PK, we indicate it here so
|
||||||
|
we know we must always update any SK's.
|
||||||
|
*/
|
||||||
|
bool m_ttl_bytes_updated;
|
||||||
|
|
||||||
/* rowkey of the last record we've read, in StorageFormat. */
|
/* rowkey of the last record we've read, in StorageFormat. */
|
||||||
String m_last_rowkey;
|
String m_last_rowkey;
|
||||||
@@ -541,7 +586,9 @@ class ha_rocksdb : public my_core::handler {
|
|||||||
bool m_update_scope_is_valid;
|
bool m_update_scope_is_valid;
|
||||||
|
|
||||||
/* SST information used for bulk loading the primary key */
|
/* SST information used for bulk loading the primary key */
|
||||||
std::shared_ptr<Rdb_sst_info> m_sst_info;
|
std::unique_ptr<Rdb_sst_info> m_sst_info;
|
||||||
|
/* External merge sorts for bulk load: key ID -> merge sort instance */
|
||||||
|
std::unordered_map<GL_INDEX_ID, Rdb_index_merge> m_key_merge;
|
||||||
Rdb_transaction *m_bulk_load_tx;
|
Rdb_transaction *m_bulk_load_tx;
|
||||||
/* Mutex to protect finalizing bulk load */
|
/* Mutex to protect finalizing bulk load */
|
||||||
mysql_mutex_t m_bulk_load_mutex;
|
mysql_mutex_t m_bulk_load_mutex;
|
||||||
@@ -636,6 +683,13 @@ class ha_rocksdb : public my_core::handler {
|
|||||||
/* Setup field_decoders based on type of scan and table->read_set */
|
/* Setup field_decoders based on type of scan and table->read_set */
|
||||||
void setup_read_decoders();
|
void setup_read_decoders();
|
||||||
|
|
||||||
|
/*
|
||||||
|
For the active index, indicates which columns must be covered for the
|
||||||
|
current lookup to be covered. If the bitmap field is null, that means this
|
||||||
|
index does not cover the current lookup for any record.
|
||||||
|
*/
|
||||||
|
MY_BITMAP m_lookup_bitmap = {nullptr, 0, 0, nullptr, nullptr};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Number of bytes in on-disk (storage) record format that are used for
|
Number of bytes in on-disk (storage) record format that are used for
|
||||||
storing SQL NULL flags.
|
storing SQL NULL flags.
|
||||||
@@ -854,11 +908,7 @@ public:
|
|||||||
DBUG_RETURN(MAX_REF_PARTS);
|
DBUG_RETURN(MAX_REF_PARTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint max_supported_key_part_length() const override {
|
uint max_supported_key_part_length() const override;
|
||||||
DBUG_ENTER_FUNC();
|
|
||||||
|
|
||||||
DBUG_RETURN(2048);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
unireg.cc will call this to make sure that the storage engine can handle
|
unireg.cc will call this to make sure that the storage engine can handle
|
||||||
@@ -1040,9 +1090,13 @@ private:
|
|||||||
rocksdb::Slice *const packed_rec)
|
rocksdb::Slice *const packed_rec)
|
||||||
MY_ATTRIBUTE((__nonnull__));
|
MY_ATTRIBUTE((__nonnull__));
|
||||||
|
|
||||||
bool should_hide_ttl_rec(const rocksdb::Slice &ttl_rec_val,
|
bool should_hide_ttl_rec(const Rdb_key_def &kd,
|
||||||
|
const rocksdb::Slice &ttl_rec_val,
|
||||||
const int64_t curr_ts)
|
const int64_t curr_ts)
|
||||||
MY_ATTRIBUTE((__warn_unused_result__));
|
MY_ATTRIBUTE((__warn_unused_result__));
|
||||||
|
void rocksdb_skip_expired_records(const Rdb_key_def &kd,
|
||||||
|
rocksdb::Iterator *const iter,
|
||||||
|
bool seek_backward);
|
||||||
|
|
||||||
int index_first_intern(uchar *buf)
|
int index_first_intern(uchar *buf)
|
||||||
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
|
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
|
||||||
@@ -1076,8 +1130,10 @@ private:
|
|||||||
struct unique_sk_buf_info *sk_info)
|
struct unique_sk_buf_info *sk_info)
|
||||||
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
|
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
|
||||||
int bulk_load_key(Rdb_transaction *const tx, const Rdb_key_def &kd,
|
int bulk_load_key(Rdb_transaction *const tx, const Rdb_key_def &kd,
|
||||||
const rocksdb::Slice &key, const rocksdb::Slice &value)
|
const rocksdb::Slice &key, const rocksdb::Slice &value,
|
||||||
|
bool sort)
|
||||||
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
|
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
|
||||||
|
void update_bytes_written(ulonglong bytes_written);
|
||||||
int update_pk(const Rdb_key_def &kd, const struct update_row_info &row_info,
|
int update_pk(const Rdb_key_def &kd, const struct update_row_info &row_info,
|
||||||
const bool &pk_changed) MY_ATTRIBUTE((__warn_unused_result__));
|
const bool &pk_changed) MY_ATTRIBUTE((__warn_unused_result__));
|
||||||
int update_sk(const TABLE *const table_arg, const Rdb_key_def &kd,
|
int update_sk(const TABLE *const table_arg, const Rdb_key_def &kd,
|
||||||
|
@@ -76,6 +76,7 @@ bool rdb_is_ttl_read_filtering_enabled();
|
|||||||
int rdb_dbug_set_ttl_rec_ts();
|
int rdb_dbug_set_ttl_rec_ts();
|
||||||
int rdb_dbug_set_ttl_snapshot_ts();
|
int rdb_dbug_set_ttl_snapshot_ts();
|
||||||
int rdb_dbug_set_ttl_read_filter_ts();
|
int rdb_dbug_set_ttl_read_filter_ts();
|
||||||
|
bool rdb_dbug_set_ttl_ignore_pk();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum operation_type : int;
|
enum operation_type : int;
|
||||||
|
@@ -0,0 +1,21 @@
|
|||||||
|
#
|
||||||
|
# A helper include file for prefix index index-only query tests
|
||||||
|
#
|
||||||
|
# Parameters:
|
||||||
|
# $prefix_index_check_title - title of the test
|
||||||
|
# $prefix_index_check_query - test query
|
||||||
|
# $prefix_index_check_read_avoided_delta - expected change of
|
||||||
|
# 'rocksdb_covered_secondary_key_lookups' status variable
|
||||||
|
# value after running the query
|
||||||
|
|
||||||
|
--let $show_count_statement = show status like 'rocksdb_covered_secondary_key_lookups'
|
||||||
|
|
||||||
|
--echo # $prefix_index_check_title
|
||||||
|
--let $base_count = query_get_value($show_count_statement, Value, 1)
|
||||||
|
|
||||||
|
--eval $prefix_index_check_query
|
||||||
|
|
||||||
|
--let $count = query_get_value($show_count_statement, Value, 1)
|
||||||
|
--let $assert_text= $prefix_index_check_title: $prefix_index_check_read_avoided_delta rocksdb_covered_secondary_key_lookups
|
||||||
|
--let $assert_cond= $count - $base_count = $prefix_index_check_read_avoided_delta
|
||||||
|
--source include/assert.inc
|
@@ -5,3 +5,4 @@ sql-mode=NO_ENGINE_SUBSTITUTION
|
|||||||
explicit-defaults-for-timestamp=1
|
explicit-defaults-for-timestamp=1
|
||||||
rocksdb_lock_wait_timeout=1
|
rocksdb_lock_wait_timeout=1
|
||||||
rocksdb_strict_collation_check=0
|
rocksdb_strict_collation_check=0
|
||||||
|
rocksdb_force_compute_memtable_stats_cachetime=0
|
||||||
|
@@ -4,20 +4,20 @@ CREATE DATABASE mysqlslap;
|
|||||||
USE mysqlslap;
|
USE mysqlslap;
|
||||||
CREATE TABLE t1(id BIGINT AUTO_INCREMENT, value BIGINT, PRIMARY KEY(id)) ENGINE=rocksdb;
|
CREATE TABLE t1(id BIGINT AUTO_INCREMENT, value BIGINT, PRIMARY KEY(id)) ENGINE=rocksdb;
|
||||||
# 2PC enabled, MyRocks durability enabled
|
# 2PC enabled, MyRocks durability enabled
|
||||||
SET GLOBAL rocksdb_enable_2pc=0;
|
SET GLOBAL rocksdb_enable_2pc=1;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
||||||
## 2PC + durability + single thread
|
## 2PC + durability + single thread
|
||||||
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
select case when variable_value-@c = 1000 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select case when variable_value-@c = 1000 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
case when variable_value-@c = 1000 then 'true' else 'false' end
|
case when variable_value-@c = 1000 then 'true' else 'false' end
|
||||||
false
|
true
|
||||||
## 2PC + durability + group commit
|
## 2PC + durability + group commit
|
||||||
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
select case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true' else 'false' end
|
case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true' else 'false' end
|
||||||
false
|
true
|
||||||
# 2PC enabled, MyRocks durability disabled
|
# 2PC enabled, MyRocks durability disabled
|
||||||
SET GLOBAL rocksdb_enable_2pc=0;
|
SET GLOBAL rocksdb_enable_2pc=1;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
|
||||||
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
@@ -28,16 +28,16 @@ select case when variable_value-@c = 0 then 'true' else 'false' end from informa
|
|||||||
case when variable_value-@c = 0 then 'true' else 'false' end
|
case when variable_value-@c = 0 then 'true' else 'false' end
|
||||||
true
|
true
|
||||||
# 2PC disabled, MyRocks durability enabled
|
# 2PC disabled, MyRocks durability enabled
|
||||||
SET GLOBAL rocksdb_enable_2pc=1;
|
SET GLOBAL rocksdb_enable_2pc=0;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
||||||
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
case when variable_value-@c = 0 then 'true' else 'false' end
|
case when variable_value-@c = 0 then 'true' else 'false' end
|
||||||
false
|
true
|
||||||
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
case when variable_value-@c = 0 then 'true' else 'false' end
|
case when variable_value-@c = 0 then 'true' else 'false' end
|
||||||
false
|
true
|
||||||
SET GLOBAL rocksdb_enable_2pc=1;
|
SET GLOBAL rocksdb_enable_2pc=1;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@@ -284,12 +284,16 @@ DROP TABLE t1;
|
|||||||
set global rocksdb_bulk_load=1;
|
set global rocksdb_bulk_load=1;
|
||||||
# Establish connection con1 (user=root)
|
# Establish connection con1 (user=root)
|
||||||
# Switch to connection con1
|
# Switch to connection con1
|
||||||
show global variables like 'rocksdb_bulk_load';
|
show global variables like 'rocksdb_bulk_load%';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
rocksdb_bulk_load ON
|
rocksdb_bulk_load ON
|
||||||
show session variables like 'rocksdb_bulk_load';
|
rocksdb_bulk_load_allow_unsorted OFF
|
||||||
|
rocksdb_bulk_load_size 1000
|
||||||
|
show session variables like 'rocksdb_bulk_load%';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
rocksdb_bulk_load ON
|
rocksdb_bulk_load ON
|
||||||
|
rocksdb_bulk_load_allow_unsorted OFF
|
||||||
|
rocksdb_bulk_load_size 1000
|
||||||
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
|
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
|
||||||
INSERT INTO t1 VALUES (1,1);
|
INSERT INTO t1 VALUES (1,1);
|
||||||
# Disconnecting on con1
|
# Disconnecting on con1
|
||||||
@@ -327,10 +331,11 @@ SET @prior_rocksdb_strict_collation_check= @@rocksdb_strict_collation_check;
|
|||||||
SET @prior_rocksdb_merge_buf_size = @@rocksdb_merge_buf_size;
|
SET @prior_rocksdb_merge_buf_size = @@rocksdb_merge_buf_size;
|
||||||
SET global rocksdb_strict_collation_check = off;
|
SET global rocksdb_strict_collation_check = off;
|
||||||
SET session rocksdb_merge_combine_read_size = 566;
|
SET session rocksdb_merge_combine_read_size = 566;
|
||||||
SET session rocksdb_merge_buf_size = 336;
|
SET session rocksdb_merge_buf_size = 340;
|
||||||
show variables like '%rocksdb_bulk_load%';
|
show variables like 'rocksdb_bulk_load%';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
rocksdb_bulk_load OFF
|
rocksdb_bulk_load OFF
|
||||||
|
rocksdb_bulk_load_allow_unsorted OFF
|
||||||
rocksdb_bulk_load_size 1000
|
rocksdb_bulk_load_size 1000
|
||||||
CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB;
|
CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB;
|
||||||
INSERT INTO t1 (a) VALUES (REPEAT("a", 80));
|
INSERT INTO t1 (a) VALUES (REPEAT("a", 80));
|
||||||
|
@@ -16,4 +16,30 @@ INSERT INTO t1 VALUES(20);
|
|||||||
INSERT INTO t1 VALUES(21);
|
INSERT INTO t1 VALUES(21);
|
||||||
SET rocksdb_bulk_load=0;
|
SET rocksdb_bulk_load=0;
|
||||||
ERROR HY000: Lost connection to MySQL server during query
|
ERROR HY000: Lost connection to MySQL server during query
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=1;
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
INSERT INTO t1 VALUES(100);
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
INSERT INTO t1 VALUES(99);
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
pk
|
||||||
|
99
|
||||||
|
100
|
||||||
|
101
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
INSERT INTO t1 VALUES(201);
|
||||||
|
INSERT INTO t1 VALUES(200);
|
||||||
|
INSERT INTO t1 VALUES(202);
|
||||||
|
INSERT INTO t1 VALUES(201);
|
||||||
|
ERROR 23000: Failed to insert the record: the key already exists
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
pk
|
||||||
|
200
|
||||||
|
201
|
||||||
|
202
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=DEFAULT;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
101
storage/rocksdb/mysql-test/rocksdb/r/bulk_load_unsorted.result
Normal file
101
storage/rocksdb/mysql-test/rocksdb/r/bulk_load_unsorted.result
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
SET rocksdb_bulk_load_size=3;
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=1;
|
||||||
|
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1");
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
-3 5
|
||||||
|
-1 3
|
||||||
|
2 0
|
||||||
|
4 -2
|
||||||
|
6 -4
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1", KEY(b));
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
6 -4
|
||||||
|
4 -2
|
||||||
|
2 0
|
||||||
|
-1 3
|
||||||
|
-3 5
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1");
|
||||||
|
CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1");
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
INSERT INTO t1 VALUES (1,1);
|
||||||
|
INSERT INTO t2 VALUES (1,1);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
INSERT INTO t1 VALUES (2,2);
|
||||||
|
SELECT * FROM t2;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1");
|
||||||
|
CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "cf1");
|
||||||
|
CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1")
|
||||||
|
PARTITION BY KEY() PARTITIONS 4;
|
||||||
|
set session transaction isolation level repeatable read;
|
||||||
|
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
|
||||||
|
STAT_TYPE VALUE
|
||||||
|
DB_NUM_SNAPSHOTS 0
|
||||||
|
start transaction with consistent snapshot;
|
||||||
|
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
|
||||||
|
STAT_TYPE VALUE
|
||||||
|
DB_NUM_SNAPSHOTS 1
|
||||||
|
set rocksdb_bulk_load=1;
|
||||||
|
set rocksdb_bulk_load_size=100000;
|
||||||
|
LOAD DATA INFILE <input_file> INTO TABLE t1;
|
||||||
|
LOAD DATA INFILE <input_file> INTO TABLE t2;
|
||||||
|
LOAD DATA INFILE <input_file> INTO TABLE t3;
|
||||||
|
set rocksdb_bulk_load=0;
|
||||||
|
SHOW TABLE STATUS WHERE name LIKE 't%';
|
||||||
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||||
|
t1 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||||
|
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||||
|
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||||
|
ANALYZE TABLE t1, t2, t3;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 analyze status OK
|
||||||
|
test.t2 analyze status OK
|
||||||
|
test.t3 analyze status OK
|
||||||
|
SHOW TABLE STATUS WHERE name LIKE 't%';
|
||||||
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||||
|
t1 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||||
|
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||||
|
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||||
|
select count(a) from t1;
|
||||||
|
count(a)
|
||||||
|
5000000
|
||||||
|
select count(b) from t1;
|
||||||
|
count(b)
|
||||||
|
5000000
|
||||||
|
select count(a) from t2;
|
||||||
|
count(a)
|
||||||
|
5000000
|
||||||
|
select count(b) from t2;
|
||||||
|
count(b)
|
||||||
|
5000000
|
||||||
|
select count(a) from t3;
|
||||||
|
count(a)
|
||||||
|
5000000
|
||||||
|
select count(b) from t3;
|
||||||
|
count(b)
|
||||||
|
5000000
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=0;
|
@@ -0,0 +1,4 @@
|
|||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=1;
|
||||||
|
ERROR HY000: Error when executing command SET: Cannot change this setting while bulk load is enabled
|
||||||
|
SET rocksdb_bulk_load=0;
|
10
storage/rocksdb/mysql-test/rocksdb/r/bytes_written.result
Normal file
10
storage/rocksdb/mysql-test/rocksdb/r/bytes_written.result
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
DROP TABLE IF EXISTS stats_test_table;
|
||||||
|
CREATE TABLE stats_test_table (a INT, b INT, PRIMARY KEY (a)) ENGINE=ROCKSDB;
|
||||||
|
SET GLOBAL rocksdb_perf_context_level=3;
|
||||||
|
INSERT INTO stats_test_table VALUES (7,1);
|
||||||
|
INSERT INTO stats_test_table VALUES (2,2);
|
||||||
|
SELECT io_write_bytes > 0 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_NAME = "stats_test_table";
|
||||||
|
io_write_bytes > 0
|
||||||
|
1
|
||||||
|
DROP TABLE stats_test_table;
|
||||||
|
SET GLOBAL rocksdb_perf_context_level=DEFAULT;
|
@@ -5,7 +5,7 @@ connection con1;
|
|||||||
CREATE TABLE t1 (a INT, pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=ROCKSDB;
|
CREATE TABLE t1 (a INT, pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=ROCKSDB;
|
||||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
ERROR: 1938
|
ERROR: 12048
|
||||||
connection con2;
|
connection con2;
|
||||||
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
|
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
|
||||||
STAT_TYPE VALUE
|
STAT_TYPE VALUE
|
||||||
@@ -18,7 +18,7 @@ STAT_TYPE VALUE
|
|||||||
DB_NUM_SNAPSHOTS 0
|
DB_NUM_SNAPSHOTS 0
|
||||||
connection con1;
|
connection con1;
|
||||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
ERROR: 1938
|
ERROR: 12048
|
||||||
connection con2;
|
connection con2;
|
||||||
INSERT INTO t1 (a) VALUES (1);
|
INSERT INTO t1 (a) VALUES (1);
|
||||||
connection con1;
|
connection con1;
|
||||||
@@ -69,7 +69,7 @@ id value value2
|
|||||||
5 5 5
|
5 5 5
|
||||||
6 6 6
|
6 6 6
|
||||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
ERROR: 1938
|
ERROR: 12048
|
||||||
connection con2;
|
connection con2;
|
||||||
INSERT INTO r1 values (7,7,7);
|
INSERT INTO r1 values (7,7,7);
|
||||||
connection con1;
|
connection con1;
|
||||||
@@ -107,12 +107,12 @@ id value value2
|
|||||||
7 7 7
|
7 7 7
|
||||||
8 8 8
|
8 8 8
|
||||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
ERROR: 1938
|
ERROR: 12048
|
||||||
connection con2;
|
connection con2;
|
||||||
INSERT INTO r1 values (9,9,9);
|
INSERT INTO r1 values (9,9,9);
|
||||||
connection con1;
|
connection con1;
|
||||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
ERROR: 1938
|
ERROR: 12048
|
||||||
connection con2;
|
connection con2;
|
||||||
INSERT INTO r1 values (10,10,10);
|
INSERT INTO r1 values (10,10,10);
|
||||||
connection con1;
|
connection con1;
|
||||||
@@ -129,7 +129,7 @@ id value value2
|
|||||||
9 9 9
|
9 9 9
|
||||||
10 10 10
|
10 10 10
|
||||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
ERROR: 1938
|
ERROR: 12048
|
||||||
INSERT INTO r1 values (11,11,11);
|
INSERT INTO r1 values (11,11,11);
|
||||||
ERROR: 0
|
ERROR: 0
|
||||||
SELECT * FROM r1;
|
SELECT * FROM r1;
|
||||||
|
@@ -125,7 +125,7 @@ id value value2
|
|||||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
ERROR: 0
|
ERROR: 0
|
||||||
INSERT INTO r1 values (11,11,11);
|
INSERT INTO r1 values (11,11,11);
|
||||||
ERROR: 1935
|
ERROR: 12045
|
||||||
SELECT * FROM r1;
|
SELECT * FROM r1;
|
||||||
id value value2
|
id value value2
|
||||||
1 1 1
|
1 1 1
|
||||||
|
@@ -0,0 +1,73 @@
|
|||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id INT,
|
||||||
|
fake_id INT,
|
||||||
|
bigfield VARCHAR(4096),
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
KEY bf (bigfield(32)),
|
||||||
|
KEY fid (fake_id, bigfield(32))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
|
||||||
|
(8, 1008, REPEAT('b', 8)),
|
||||||
|
(24, 1024, REPEAT('c', 24)),
|
||||||
|
(31, 1031, REPEAT('d', 31)),
|
||||||
|
(32, 1032, REPEAT('x', 32)),
|
||||||
|
(33, 1033, REPEAT('y', 33)),
|
||||||
|
(128, 1128, REPEAT('z', 128));
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id fake_id bigfield
|
||||||
|
1 1001 a
|
||||||
|
8 1008 bbbbbbbb
|
||||||
|
24 1024 cccccccccccccccccccccccc
|
||||||
|
31 1031 ddddddddddddddddddddddddddddddd
|
||||||
|
32 1032 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
33 1033 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
|
||||||
|
128 1128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
|
||||||
|
# Eligible for optimization, access via fake_id only
|
||||||
|
SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031;
|
||||||
|
id bigfield
|
||||||
|
31 ddddddddddddddddddddddddddddddd
|
||||||
|
include/assert.inc [Eligible for optimization, access via fake_id only: 2 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Not eligible for optimization, access via fake_id of big row.
|
||||||
|
SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033;
|
||||||
|
id bigfield
|
||||||
|
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
|
||||||
|
include/assert.inc [Not eligible for optimization, access via fake_id of big row.: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
DROP TABLE t1;
|
||||||
|
set session debug= '+d,MYROCKS_NO_COVERED_BITMAP_FORMAT';
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id INT,
|
||||||
|
fake_id INT,
|
||||||
|
bigfield VARCHAR(4096),
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
KEY bf (bigfield(32)),
|
||||||
|
KEY fid (fake_id, bigfield(32))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
set session debug= '-d,MYROCKS_NO_COVERED_BITMAP_FORMAT';
|
||||||
|
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
|
||||||
|
(8, 1008, REPEAT('b', 8)),
|
||||||
|
(24, 1024, REPEAT('c', 24)),
|
||||||
|
(31, 1031, REPEAT('d', 31)),
|
||||||
|
(32, 1032, REPEAT('x', 32)),
|
||||||
|
(33, 1033, REPEAT('y', 33)),
|
||||||
|
(128, 1128, REPEAT('z', 128));
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id fake_id bigfield
|
||||||
|
1 1001 a
|
||||||
|
8 1008 bbbbbbbb
|
||||||
|
24 1024 cccccccccccccccccccccccc
|
||||||
|
31 1031 ddddddddddddddddddddddddddddddd
|
||||||
|
32 1032 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
33 1033 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
|
||||||
|
128 1128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
|
||||||
|
# No longer eligible for optimization since no covered bitmap was stored.
|
||||||
|
SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031;
|
||||||
|
id bigfield
|
||||||
|
31 ddddddddddddddddddddddddddddddd
|
||||||
|
include/assert.inc [No longer eligible for optimization since no covered bitmap was stored.: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Not eligible for optimization.
|
||||||
|
SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033;
|
||||||
|
id bigfield
|
||||||
|
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
|
||||||
|
include/assert.inc [Not eligible for optimization.: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
DROP TABLE t1;
|
1009
storage/rocksdb/mysql-test/rocksdb/r/ddl_high_priority.result
Normal file
1009
storage/rocksdb/mysql-test/rocksdb/r/ddl_high_priority.result
Normal file
File diff suppressed because it is too large
Load Diff
490
storage/rocksdb/mysql-test/rocksdb/r/deadlock_tracking.result
Normal file
490
storage/rocksdb/mysql-test/rocksdb/r/deadlock_tracking.result
Normal file
@@ -0,0 +1,490 @@
|
|||||||
|
set @prior_lock_wait_timeout = @@rocksdb_lock_wait_timeout;
|
||||||
|
set @prior_deadlock_detect = @@rocksdb_deadlock_detect;
|
||||||
|
set @prior_max_latest_deadlocks = @@rocksdb_max_latest_deadlocks;
|
||||||
|
set global rocksdb_deadlock_detect = on;
|
||||||
|
set global rocksdb_lock_wait_timeout = 10000;
|
||||||
|
# Clears deadlock buffer of any prior deadlocks.
|
||||||
|
set global rocksdb_max_latest_deadlocks = 0;
|
||||||
|
set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks;
|
||||||
|
create table t (i int primary key) engine=rocksdb;
|
||||||
|
insert into t values (1), (2), (3);
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Deadlock #1
|
||||||
|
begin;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
begin;
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
rollback;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
rollback;
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Deadlock #2
|
||||||
|
begin;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
begin;
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
rollback;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
rollback;
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
set global rocksdb_max_latest_deadlocks = 10;
|
||||||
|
Deadlock #3
|
||||||
|
begin;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
begin;
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
rollback;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
rollback;
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
set global rocksdb_max_latest_deadlocks = 1;
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
set rocksdb_deadlock_detect_depth = 2;
|
||||||
|
Deadlock #4
|
||||||
|
begin;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
begin;
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
begin;
|
||||||
|
select * from t where i=3 for update;
|
||||||
|
i
|
||||||
|
3
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
select * from t where i=3 for update;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
rollback;
|
||||||
|
i
|
||||||
|
3
|
||||||
|
rollback;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
rollback;
|
||||||
|
set global rocksdb_max_latest_deadlocks = 5;
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
|
||||||
|
-------DEADLOCK EXCEEDED MAX DEPTH-------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Deadlock #5
|
||||||
|
begin;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
begin;
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
begin;
|
||||||
|
select * from t where i=3 lock in share mode;
|
||||||
|
i
|
||||||
|
3
|
||||||
|
select * from t where i=100 for update;
|
||||||
|
i
|
||||||
|
select * from t where i=101 for update;
|
||||||
|
i
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
select * from t where i=3 lock in share mode;
|
||||||
|
i
|
||||||
|
3
|
||||||
|
select * from t where i=200 for update;
|
||||||
|
i
|
||||||
|
select * from t where i=201 for update;
|
||||||
|
i
|
||||||
|
select * from t where i=1 lock in share mode;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
rollback;
|
||||||
|
i
|
||||||
|
2
|
||||||
|
rollback;
|
||||||
|
rollback;
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: SHARED
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: PRIMARY
|
||||||
|
TABLE NAME: test.t
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
|
||||||
|
-------DEADLOCK EXCEEDED MAX DEPTH-------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout;
|
||||||
|
set global rocksdb_deadlock_detect = @prior_deadlock_detect;
|
||||||
|
drop table t;
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
|
||||||
|
*** DEADLOCK PATH
|
||||||
|
=========================================
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: NOT FOUND; IDX_ID
|
||||||
|
TABLE NAME: NOT FOUND; IDX_ID
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: SHARED
|
||||||
|
INDEX NAME: NOT FOUND; IDX_ID
|
||||||
|
TABLE NAME: NOT FOUND; IDX_ID
|
||||||
|
---------------WAITING FOR---------------
|
||||||
|
TXN_ID
|
||||||
|
COLUMN FAMILY NAME: default
|
||||||
|
KEY
|
||||||
|
LOCK TYPE: EXCLUSIVE
|
||||||
|
INDEX NAME: NOT FOUND; IDX_ID
|
||||||
|
TABLE NAME: NOT FOUND; IDX_ID
|
||||||
|
|
||||||
|
--------TXN_ID GOT DEADLOCK---------
|
||||||
|
|
||||||
|
-------DEADLOCK EXCEEDED MAX DEPTH-------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
set global rocksdb_max_latest_deadlocks = 0;
|
||||||
|
# Clears deadlock buffer of any existent deadlocks.
|
||||||
|
set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks;
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
Type Name Status
|
||||||
|
rocksdb
|
||||||
|
============================================================
|
||||||
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
============================================================
|
||||||
|
---------
|
||||||
|
SNAPSHOTS
|
||||||
|
---------
|
||||||
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
|
-----------------------------------------
|
||||||
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
|
=========================================
|
||||||
|
|
@@ -3,6 +3,9 @@ DROP TABLE IF EXISTS t2;
|
|||||||
DROP TABLE IF EXISTS t3;
|
DROP TABLE IF EXISTS t3;
|
||||||
DROP TABLE IF EXISTS t4;
|
DROP TABLE IF EXISTS t4;
|
||||||
DROP TABLE IF EXISTS t5;
|
DROP TABLE IF EXISTS t5;
|
||||||
|
call mtr.add_suppression("Column family 'cf1' not found");
|
||||||
|
call mtr.add_suppression("Column family 'rev:cf2' not found");
|
||||||
|
call mtr.add_suppression("LibRocksDB");
|
||||||
set global rocksdb_compact_cf = 'cf1';
|
set global rocksdb_compact_cf = 'cf1';
|
||||||
set global rocksdb_compact_cf = 'rev:cf2';
|
set global rocksdb_compact_cf = 'rev:cf2';
|
||||||
set global rocksdb_signal_drop_index_thread = 1;
|
set global rocksdb_signal_drop_index_thread = 1;
|
||||||
|
@@ -3,6 +3,8 @@ DROP TABLE IF EXISTS t2;
|
|||||||
DROP TABLE IF EXISTS t3;
|
DROP TABLE IF EXISTS t3;
|
||||||
DROP TABLE IF EXISTS t4;
|
DROP TABLE IF EXISTS t4;
|
||||||
DROP TABLE IF EXISTS t5;
|
DROP TABLE IF EXISTS t5;
|
||||||
|
call mtr.add_suppression("Column family 'cf1' not found");
|
||||||
|
call mtr.add_suppression("Column family 'rev:cf2' not found");
|
||||||
set global rocksdb_compact_cf = 'cf1';
|
set global rocksdb_compact_cf = 'cf1';
|
||||||
set global rocksdb_compact_cf = 'rev:cf2';
|
set global rocksdb_compact_cf = 'rev:cf2';
|
||||||
set global rocksdb_signal_drop_index_thread = 1;
|
set global rocksdb_signal_drop_index_thread = 1;
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
call mtr.add_suppression("Column family 'cf1' not found");
|
||||||
|
call mtr.add_suppression("Column family 'rev:cf2' not found");
|
||||||
set global rocksdb_compact_cf = 'cf1';
|
set global rocksdb_compact_cf = 'cf1';
|
||||||
set global rocksdb_compact_cf = 'rev:cf2';
|
set global rocksdb_compact_cf = 'rev:cf2';
|
||||||
set global rocksdb_signal_drop_index_thread = 1;
|
set global rocksdb_signal_drop_index_thread = 1;
|
||||||
|
@@ -178,16 +178,20 @@ id1 id2 id3
|
|||||||
9 17 9
|
9 17 9
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
CREATE TABLE t1 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
|
CREATE TABLE t1 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
|
||||||
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
|
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
|
||||||
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
|
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
|
||||||
PRIMARY KEY (id1, id2, id3),
|
PRIMARY KEY (id1, id2, id3),
|
||||||
UNIQUE KEY (id3, id1)) ENGINE=ROCKSDB;
|
UNIQUE KEY (id3, id1)) ENGINE=ROCKSDB;
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
CREATE TABLE t2 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
|
CREATE TABLE t2 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
|
||||||
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
|
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
|
||||||
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
|
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
|
||||||
PRIMARY KEY (id1, id2, id3),
|
PRIMARY KEY (id1, id2, id3),
|
||||||
UNIQUE KEY (id3, id1) COMMENT 'rev:cf') ENGINE=ROCKSDB;
|
UNIQUE KEY (id3, id1) COMMENT 'rev:cf') ENGINE=ROCKSDB;
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
INSERT INTO t1 VALUES (1, 1, 1) ON DUPLICATE KEY UPDATE id2 = 9;
|
INSERT INTO t1 VALUES (1, 1, 1) ON DUPLICATE KEY UPDATE id2 = 9;
|
||||||
SELECT * FROM t1 WHERE id1 = 1;
|
SELECT * FROM t1 WHERE id1 = 1;
|
||||||
id1 id2 id3
|
id1 id2 id3
|
||||||
|
@@ -0,0 +1,80 @@
|
|||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id INT,
|
||||||
|
fake_id INT,
|
||||||
|
bigfield VARCHAR(4096),
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
KEY bf (bigfield(32)),
|
||||||
|
KEY fid (fake_id, bigfield(32))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
|
||||||
|
(8, 1008, REPEAT('b', 8)),
|
||||||
|
(24, 1024, REPEAT('c', 24)),
|
||||||
|
(31, 1031, REPEAT('d', 31)),
|
||||||
|
(32, 1032, REPEAT('x', 32)),
|
||||||
|
(33, 1033, REPEAT('y', 33)),
|
||||||
|
(128, 1128, REPEAT('z', 128));
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id fake_id bigfield
|
||||||
|
1 1001 a
|
||||||
|
8 1008 bbbbbbbb
|
||||||
|
24 1024 cccccccccccccccccccccccc
|
||||||
|
31 1031 ddddddddddddddddddddddddddddddd
|
||||||
|
32 1032 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
33 1033 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
|
||||||
|
128 1128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
|
||||||
|
# Baseline sanity check
|
||||||
|
no-op query
|
||||||
|
no-op query
|
||||||
|
include/assert.inc [Baseline sanity check: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Eligible for optimization.
|
||||||
|
id bigfield
|
||||||
|
31 ddddddddddddddddddddddddddddddd
|
||||||
|
include/assert.inc [Eligible for optimization.: 2 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Eligible for optimization, access via fake_id only
|
||||||
|
id bigfield
|
||||||
|
31 ddddddddddddddddddddddddddddddd
|
||||||
|
include/assert.inc [Eligible for optimization, access via fake_id only: 2 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Not eligible for optimization, access via fake_id of big row.
|
||||||
|
id bigfield
|
||||||
|
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
|
||||||
|
include/assert.inc [Not eligible for optimization, access via fake_id of big row.: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Eligible for optimization.
|
||||||
|
id bigfield
|
||||||
|
32 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
include/assert.inc [Eligible for optimization.: 1 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Not eligible for optimization.
|
||||||
|
id bigfield
|
||||||
|
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
|
||||||
|
include/assert.inc [Not eligible for optimization.: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Eligible for optimization.
|
||||||
|
id bigfield
|
||||||
|
8 bbbbbbbb
|
||||||
|
include/assert.inc [Eligible for optimization.: 2 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Eligible for optimization.
|
||||||
|
id bigfield
|
||||||
|
24 cccccccccccccccccccccccc
|
||||||
|
include/assert.inc [Eligible for optimization.: 2 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Not eligible for optimization.
|
||||||
|
id bigfield
|
||||||
|
128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
|
||||||
|
include/assert.inc [Not eligible for optimization.: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
#
|
||||||
|
# Test that multi-byte charsets are handled correctly
|
||||||
|
#
|
||||||
|
# Charset record obviously shorter than the prefix
|
||||||
|
a b
|
||||||
|
1 a
|
||||||
|
include/assert.inc [Charset record obviously shorter than the prefix: 2 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Charset record shorter than prefix
|
||||||
|
a b
|
||||||
|
2 cc
|
||||||
|
include/assert.inc [Charset record shorter than prefix: 2 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Charset record with glyphs shorter than prefix
|
||||||
|
a b
|
||||||
|
3 ŽŽ
|
||||||
|
include/assert.inc [Charset record with glyphs shorter than prefix: 1 rocksdb_covered_secondary_key_lookups]
|
||||||
|
# Charset record longer than prefix
|
||||||
|
a b
|
||||||
|
4 žžžž
|
||||||
|
include/assert.inc [Charset record longer than prefix: 0 rocksdb_covered_secondary_key_lookups]
|
@@ -9,9 +9,9 @@ KEY (x)) ENGINE = ROCKSDB;
|
|||||||
SELECT TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME,INDEX_NAME,INDEX_TYPE,KV_FORMAT_VERSION,CF FROM INFORMATION_SCHEMA.ROCKSDB_DDL WHERE TABLE_NAME like 'is_ddl_t%';
|
SELECT TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME,INDEX_NAME,INDEX_TYPE,KV_FORMAT_VERSION,CF FROM INFORMATION_SCHEMA.ROCKSDB_DDL WHERE TABLE_NAME like 'is_ddl_t%';
|
||||||
TABLE_SCHEMA TABLE_NAME PARTITION_NAME INDEX_NAME INDEX_TYPE KV_FORMAT_VERSION CF
|
TABLE_SCHEMA TABLE_NAME PARTITION_NAME INDEX_NAME INDEX_TYPE KV_FORMAT_VERSION CF
|
||||||
test is_ddl_t2 NULL PRIMARY 1 13 zy_cf
|
test is_ddl_t2 NULL PRIMARY 1 13 zy_cf
|
||||||
test is_ddl_t2 NULL x 2 12 default
|
test is_ddl_t2 NULL x 2 13 default
|
||||||
test is_ddl_t1 NULL PRIMARY 1 13 default
|
test is_ddl_t1 NULL PRIMARY 1 13 default
|
||||||
test is_ddl_t1 NULL j 2 12 default
|
test is_ddl_t1 NULL j 2 13 default
|
||||||
test is_ddl_t1 NULL k 2 12 kl_cf
|
test is_ddl_t1 NULL k 2 13 kl_cf
|
||||||
DROP TABLE is_ddl_t1;
|
DROP TABLE is_ddl_t1;
|
||||||
DROP TABLE is_ddl_t2;
|
DROP TABLE is_ddl_t2;
|
||||||
|
@@ -40,6 +40,33 @@ t1 0 PRIMARY 1 pk A # NULL NULL LSMTREE
|
|||||||
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
|
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
|
||||||
ALTER TABLE t1 DROP KEY a;
|
ALTER TABLE t1 DROP KEY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=0;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
KEY (a(767))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
KEY (a(768))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
Warnings:
|
||||||
|
Warning 1071 Specified key was too long; max key length is 767 bytes
|
||||||
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
KEY (a(3072))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
KEY (a(3073))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
Warnings:
|
||||||
|
Warning 1071 Specified key was too long; max key length is 3072 bytes
|
||||||
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
#
|
#
|
||||||
# Issue #376: MyRocks: ORDER BY optimizer is unable to use the index extension
|
# Issue #376: MyRocks: ORDER BY optimizer is unable to use the index extension
|
||||||
#
|
#
|
||||||
|
@@ -46,3 +46,26 @@ SHOW KEYS IN t1;
|
|||||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||||
t1 0 PRIMARY 1 b A # NULL NULL LSMTREE
|
t1 0 PRIMARY 1 b A # NULL NULL LSMTREE
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=0;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
PRIMARY KEY (a(767))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
PRIMARY KEY (a(768))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
ERROR 42000: Specified key was too long; max key length is 767 bytes
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
PRIMARY KEY (a(3072))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
PRIMARY KEY (a(3073))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
ERROR 42000: Specified key was too long; max key length is 3072 bytes
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
|
@@ -40,3 +40,30 @@ t1 0 PRIMARY 1 pk A # NULL NULL LSMTREE
|
|||||||
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
|
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
|
||||||
ALTER TABLE t1 DROP KEY a;
|
ALTER TABLE t1 DROP KEY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=0;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
KEY (a(767))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
KEY (a(768))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
Warnings:
|
||||||
|
Warning 1071 Specified key was too long; max key length is 767 bytes
|
||||||
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
KEY (a(3072))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
KEY (a(3073))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
Warnings:
|
||||||
|
Warning 1071 Specified key was too long; max key length is 3072 bytes
|
||||||
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
|
@@ -40,3 +40,30 @@ t1 0 PRIMARY 1 pk A # NULL NULL LSMTREE
|
|||||||
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
|
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
|
||||||
ALTER TABLE t1 DROP KEY a;
|
ALTER TABLE t1 DROP KEY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=0;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
KEY (a(767))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
KEY (a(768))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
Warnings:
|
||||||
|
Warning 1071 Specified key was too long; max key length is 767 bytes
|
||||||
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
KEY (a(3072))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
KEY (a(3073))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
Warnings:
|
||||||
|
Warning 1071 Specified key was too long; max key length is 3072 bytes
|
||||||
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
|
@@ -17,7 +17,7 @@ id val1 val2
|
|||||||
2 2 2
|
2 2 2
|
||||||
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
||||||
Type Name Status
|
Type Name Status
|
||||||
SNAPSHOTS rocksdb
|
rocksdb
|
||||||
============================================================
|
============================================================
|
||||||
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
============================================================
|
============================================================
|
||||||
@@ -25,6 +25,7 @@ TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
|||||||
SNAPSHOTS
|
SNAPSHOTS
|
||||||
---------
|
---------
|
||||||
LIST OF SNAPSHOTS FOR EACH SESSION:
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
=========================================
|
=========================================
|
||||||
@@ -48,7 +49,7 @@ id val1 val2
|
|||||||
DELETE FROM t1 WHERE id=30;
|
DELETE FROM t1 WHERE id=30;
|
||||||
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
||||||
Type Name Status
|
Type Name Status
|
||||||
SNAPSHOTS rocksdb
|
rocksdb
|
||||||
============================================================
|
============================================================
|
||||||
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
============================================================
|
============================================================
|
||||||
@@ -61,6 +62,7 @@ MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
|
|||||||
SHOW ENGINE rocksdb TRANSACTION STATUS
|
SHOW ENGINE rocksdb TRANSACTION STATUS
|
||||||
lock count 8, write count 4
|
lock count 8, write count 4
|
||||||
insert count 2, update count 1, delete count 1
|
insert count 2, update count 1, delete count 1
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
=========================================
|
=========================================
|
||||||
@@ -68,7 +70,7 @@ END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
|||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
||||||
Type Name Status
|
Type Name Status
|
||||||
SNAPSHOTS rocksdb
|
rocksdb
|
||||||
============================================================
|
============================================================
|
||||||
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
============================================================
|
============================================================
|
||||||
@@ -76,6 +78,7 @@ TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
|||||||
SNAPSHOTS
|
SNAPSHOTS
|
||||||
---------
|
---------
|
||||||
LIST OF SNAPSHOTS FOR EACH SESSION:
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
=========================================
|
=========================================
|
||||||
@@ -84,7 +87,7 @@ START TRANSACTION;
|
|||||||
INSERT INTO t1 VALUES(40,40,40);
|
INSERT INTO t1 VALUES(40,40,40);
|
||||||
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
||||||
Type Name Status
|
Type Name Status
|
||||||
SNAPSHOTS rocksdb
|
rocksdb
|
||||||
============================================================
|
============================================================
|
||||||
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
============================================================
|
============================================================
|
||||||
@@ -97,6 +100,7 @@ MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
|
|||||||
SHOW ENGINE rocksdb TRANSACTION STATUS
|
SHOW ENGINE rocksdb TRANSACTION STATUS
|
||||||
lock count 2, write count 1
|
lock count 2, write count 1
|
||||||
insert count 1, update count 0, delete count 0
|
insert count 1, update count 0, delete count 0
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
=========================================
|
=========================================
|
||||||
@@ -104,7 +108,7 @@ END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
|||||||
COMMIT;
|
COMMIT;
|
||||||
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
||||||
Type Name Status
|
Type Name Status
|
||||||
SNAPSHOTS rocksdb
|
rocksdb
|
||||||
============================================================
|
============================================================
|
||||||
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
============================================================
|
============================================================
|
||||||
@@ -112,6 +116,7 @@ TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
|||||||
SNAPSHOTS
|
SNAPSHOTS
|
||||||
---------
|
---------
|
||||||
LIST OF SNAPSHOTS FOR EACH SESSION:
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
=========================================
|
=========================================
|
||||||
@@ -133,7 +138,7 @@ UPDATE t2 SET value=3 WHERE id2=2;
|
|||||||
DELETE FROM t2 WHERE id1=10;
|
DELETE FROM t2 WHERE id1=10;
|
||||||
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
||||||
Type Name Status
|
Type Name Status
|
||||||
SNAPSHOTS rocksdb
|
rocksdb
|
||||||
============================================================
|
============================================================
|
||||||
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
============================================================
|
============================================================
|
||||||
@@ -146,6 +151,7 @@ MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
|
|||||||
SHOW ENGINE rocksdb TRANSACTION STATUS
|
SHOW ENGINE rocksdb TRANSACTION STATUS
|
||||||
lock count 9, write count 7
|
lock count 9, write count 7
|
||||||
insert count 2, update count 1, delete count 1
|
insert count 2, update count 1, delete count 1
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
=========================================
|
=========================================
|
||||||
|
@@ -0,0 +1,37 @@
|
|||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
P1 VARCHAR(64), P2 VARCHAR(64), P3 VARCHAR(64), P4 VARCHAR(64),
|
||||||
|
S1 VARCHAR(64), S2 VARCHAR(64), S3 VARCHAR(64), S4 VARCHAR(64),
|
||||||
|
S5 VARCHAR(64), S6 VARCHAR(64), S7 VARCHAR(64), S8 VARCHAR(64),
|
||||||
|
S9 VARCHAR(64), S10 VARCHAR(64), S11 VARCHAR(64), S12 VARCHAR(64),
|
||||||
|
S13 VARCHAR(64), S14 VARCHAR(64), S15 VARCHAR(64), S16 VARCHAR(64),
|
||||||
|
PRIMARY KEY (P1(8), P2(8), P3(8), P4(8)),
|
||||||
|
KEY SK (S1(8), S2(8), S3(8), S4(8),
|
||||||
|
S5(8), S6(8), S7(8), S8(8),
|
||||||
|
S9(8), S10(8), S11(8), S12(8),
|
||||||
|
S13(8), S14(8), S15(8), S16(8))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
INSERT INTO T1 VALUES ('1', '2', '3', '4',
|
||||||
|
'5', '6', '7', '8',
|
||||||
|
'9', '10', '11', '12',
|
||||||
|
'13', '14', '15', '16',
|
||||||
|
'17', '18', '19', '20');
|
||||||
|
SELECT * FROM T1;
|
||||||
|
P1 P2 P3 P4 S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16
|
||||||
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
||||||
|
# Not eligible for optimization, shorter than prefix length.
|
||||||
|
SELECT P4, S2 FROM T1 FORCE INDEX(SK) WHERE S1='5';
|
||||||
|
P4 S2
|
||||||
|
4 6
|
||||||
|
include/assert.inc [Not eligible for optimization, shorter than prefix length.: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
DELETE FROM T1;
|
||||||
|
INSERT INTO T1 VALUES ('100000000', '200000000', '300000000', '400000000',
|
||||||
|
'500000000', '600000000', '700000000', '800000000',
|
||||||
|
'900000000', '100000000', '110000000', '120000000',
|
||||||
|
'130000000', '140000000', '150000000', '160000000',
|
||||||
|
'170000000', '180000000', '190000000', '200000000');
|
||||||
|
# Not eligible for optimization, longer than prefix length.
|
||||||
|
SELECT P4, S2 FROM T1 FORCE INDEX(SK) WHERE S1='5';
|
||||||
|
P4 S2
|
||||||
|
include/assert.inc [Not eligible for optimization, longer than prefix length.: 0 rocksdb_covered_secondary_key_lookups]
|
||||||
|
DROP TABLE T1;
|
@@ -868,6 +868,7 @@ rocksdb_block_restart_interval 16
|
|||||||
rocksdb_block_size 4096
|
rocksdb_block_size 4096
|
||||||
rocksdb_block_size_deviation 10
|
rocksdb_block_size_deviation 10
|
||||||
rocksdb_bulk_load OFF
|
rocksdb_bulk_load OFF
|
||||||
|
rocksdb_bulk_load_allow_unsorted OFF
|
||||||
rocksdb_bulk_load_size 1000
|
rocksdb_bulk_load_size 1000
|
||||||
rocksdb_bytes_per_sync 0
|
rocksdb_bytes_per_sync 0
|
||||||
rocksdb_cache_index_and_filter_blocks ON
|
rocksdb_cache_index_and_filter_blocks ON
|
||||||
@@ -880,13 +881,16 @@ rocksdb_compaction_sequential_deletes 0
|
|||||||
rocksdb_compaction_sequential_deletes_count_sd OFF
|
rocksdb_compaction_sequential_deletes_count_sd OFF
|
||||||
rocksdb_compaction_sequential_deletes_file_size 0
|
rocksdb_compaction_sequential_deletes_file_size 0
|
||||||
rocksdb_compaction_sequential_deletes_window 0
|
rocksdb_compaction_sequential_deletes_window 0
|
||||||
|
rocksdb_concurrent_prepare ON
|
||||||
rocksdb_create_checkpoint
|
rocksdb_create_checkpoint
|
||||||
rocksdb_create_if_missing ON
|
rocksdb_create_if_missing ON
|
||||||
rocksdb_create_missing_column_families OFF
|
rocksdb_create_missing_column_families OFF
|
||||||
rocksdb_datadir ./.rocksdb
|
rocksdb_datadir ./.rocksdb
|
||||||
rocksdb_db_write_buffer_size 0
|
rocksdb_db_write_buffer_size 0
|
||||||
rocksdb_deadlock_detect OFF
|
rocksdb_deadlock_detect OFF
|
||||||
|
rocksdb_deadlock_detect_depth 50
|
||||||
rocksdb_debug_optimizer_no_zero_cardinality ON
|
rocksdb_debug_optimizer_no_zero_cardinality ON
|
||||||
|
rocksdb_debug_ttl_ignore_pk OFF
|
||||||
rocksdb_debug_ttl_read_filter_ts 0
|
rocksdb_debug_ttl_read_filter_ts 0
|
||||||
rocksdb_debug_ttl_rec_ts 0
|
rocksdb_debug_ttl_rec_ts 0
|
||||||
rocksdb_debug_ttl_snapshot_ts 0
|
rocksdb_debug_ttl_snapshot_ts 0
|
||||||
@@ -903,6 +907,7 @@ rocksdb_error_if_exists OFF
|
|||||||
rocksdb_flush_log_at_trx_commit 1
|
rocksdb_flush_log_at_trx_commit 1
|
||||||
rocksdb_flush_memtable_on_analyze ON
|
rocksdb_flush_memtable_on_analyze ON
|
||||||
rocksdb_force_compute_memtable_stats ON
|
rocksdb_force_compute_memtable_stats ON
|
||||||
|
rocksdb_force_compute_memtable_stats_cachetime 0
|
||||||
rocksdb_force_flush_memtable_and_lzero_now OFF
|
rocksdb_force_flush_memtable_and_lzero_now OFF
|
||||||
rocksdb_force_flush_memtable_now OFF
|
rocksdb_force_flush_memtable_now OFF
|
||||||
rocksdb_force_index_records_in_range 0
|
rocksdb_force_index_records_in_range 0
|
||||||
@@ -912,12 +917,15 @@ rocksdb_info_log_level error_level
|
|||||||
rocksdb_io_write_timeout 0
|
rocksdb_io_write_timeout 0
|
||||||
rocksdb_is_fd_close_on_exec ON
|
rocksdb_is_fd_close_on_exec ON
|
||||||
rocksdb_keep_log_file_num 1000
|
rocksdb_keep_log_file_num 1000
|
||||||
|
rocksdb_large_prefix OFF
|
||||||
rocksdb_lock_scanned_rows OFF
|
rocksdb_lock_scanned_rows OFF
|
||||||
rocksdb_lock_wait_timeout 1
|
rocksdb_lock_wait_timeout 1
|
||||||
rocksdb_log_file_time_to_roll 0
|
rocksdb_log_file_time_to_roll 0
|
||||||
rocksdb_manifest_preallocation_size 4194304
|
rocksdb_manifest_preallocation_size 4194304
|
||||||
|
rocksdb_manual_wal_flush ON
|
||||||
rocksdb_master_skip_tx_api OFF
|
rocksdb_master_skip_tx_api OFF
|
||||||
rocksdb_max_background_jobs 2
|
rocksdb_max_background_jobs 2
|
||||||
|
rocksdb_max_latest_deadlocks 5
|
||||||
rocksdb_max_log_file_size 0
|
rocksdb_max_log_file_size 0
|
||||||
rocksdb_max_manifest_file_size 18446744073709551615
|
rocksdb_max_manifest_file_size 18446744073709551615
|
||||||
rocksdb_max_open_files -1
|
rocksdb_max_open_files -1
|
||||||
@@ -926,6 +934,7 @@ rocksdb_max_subcompactions 1
|
|||||||
rocksdb_max_total_wal_size 0
|
rocksdb_max_total_wal_size 0
|
||||||
rocksdb_merge_buf_size 67108864
|
rocksdb_merge_buf_size 67108864
|
||||||
rocksdb_merge_combine_read_size 1073741824
|
rocksdb_merge_combine_read_size 1073741824
|
||||||
|
rocksdb_merge_tmp_file_removal_delay_ms 0
|
||||||
rocksdb_new_table_reader_for_compaction_inputs OFF
|
rocksdb_new_table_reader_for_compaction_inputs OFF
|
||||||
rocksdb_no_block_cache OFF
|
rocksdb_no_block_cache OFF
|
||||||
rocksdb_override_cf_options
|
rocksdb_override_cf_options
|
||||||
@@ -942,6 +951,7 @@ rocksdb_records_in_range 50
|
|||||||
rocksdb_reset_stats OFF
|
rocksdb_reset_stats OFF
|
||||||
rocksdb_seconds_between_stat_computes 3600
|
rocksdb_seconds_between_stat_computes 3600
|
||||||
rocksdb_signal_drop_index_thread OFF
|
rocksdb_signal_drop_index_thread OFF
|
||||||
|
rocksdb_sim_cache_size 0
|
||||||
rocksdb_skip_bloom_filter_on_read OFF
|
rocksdb_skip_bloom_filter_on_read OFF
|
||||||
rocksdb_skip_fill_cache OFF
|
rocksdb_skip_fill_cache OFF
|
||||||
rocksdb_skip_unique_check_tables .*
|
rocksdb_skip_unique_check_tables .*
|
||||||
@@ -957,6 +967,7 @@ rocksdb_trace_sst_api OFF
|
|||||||
rocksdb_unsafe_for_binlog OFF
|
rocksdb_unsafe_for_binlog OFF
|
||||||
rocksdb_update_cf_options
|
rocksdb_update_cf_options
|
||||||
rocksdb_use_adaptive_mutex OFF
|
rocksdb_use_adaptive_mutex OFF
|
||||||
|
rocksdb_use_clock_cache OFF
|
||||||
rocksdb_use_direct_io_for_flush_and_compaction OFF
|
rocksdb_use_direct_io_for_flush_and_compaction OFF
|
||||||
rocksdb_use_direct_reads OFF
|
rocksdb_use_direct_reads OFF
|
||||||
rocksdb_use_fsync OFF
|
rocksdb_use_fsync OFF
|
||||||
@@ -1444,6 +1455,7 @@ rocksdb_memtable_total #
|
|||||||
rocksdb_memtable_unflushed #
|
rocksdb_memtable_unflushed #
|
||||||
rocksdb_queries_point #
|
rocksdb_queries_point #
|
||||||
rocksdb_queries_range #
|
rocksdb_queries_range #
|
||||||
|
rocksdb_covered_secondary_key_lookups #
|
||||||
rocksdb_block_cache_add #
|
rocksdb_block_cache_add #
|
||||||
rocksdb_block_cache_data_hit #
|
rocksdb_block_cache_data_hit #
|
||||||
rocksdb_block_cache_data_miss #
|
rocksdb_block_cache_data_miss #
|
||||||
@@ -1496,6 +1508,16 @@ rocksdb_number_superversion_cleanups #
|
|||||||
rocksdb_number_superversion_releases #
|
rocksdb_number_superversion_releases #
|
||||||
rocksdb_rate_limit_delay_millis #
|
rocksdb_rate_limit_delay_millis #
|
||||||
rocksdb_snapshot_conflict_errors #
|
rocksdb_snapshot_conflict_errors #
|
||||||
|
rocksdb_stall_l0_file_count_limit_slowdowns #
|
||||||
|
rocksdb_stall_locked_l0_file_count_limit_slowdowns #
|
||||||
|
rocksdb_stall_l0_file_count_limit_stops #
|
||||||
|
rocksdb_stall_locked_l0_file_count_limit_stops #
|
||||||
|
rocksdb_stall_pending_compaction_limit_stops #
|
||||||
|
rocksdb_stall_pending_compaction_limit_slowdowns #
|
||||||
|
rocksdb_stall_memtable_limit_stops #
|
||||||
|
rocksdb_stall_memtable_limit_slowdowns #
|
||||||
|
rocksdb_stall_total_stops #
|
||||||
|
rocksdb_stall_total_slowdowns #
|
||||||
rocksdb_stall_micros #
|
rocksdb_stall_micros #
|
||||||
rocksdb_wal_bytes #
|
rocksdb_wal_bytes #
|
||||||
rocksdb_wal_group_syncs #
|
rocksdb_wal_group_syncs #
|
||||||
@@ -1520,6 +1542,7 @@ ROCKSDB_MEMTABLE_TOTAL
|
|||||||
ROCKSDB_MEMTABLE_UNFLUSHED
|
ROCKSDB_MEMTABLE_UNFLUSHED
|
||||||
ROCKSDB_QUERIES_POINT
|
ROCKSDB_QUERIES_POINT
|
||||||
ROCKSDB_QUERIES_RANGE
|
ROCKSDB_QUERIES_RANGE
|
||||||
|
ROCKSDB_COVERED_SECONDARY_KEY_LOOKUPS
|
||||||
ROCKSDB_BLOCK_CACHE_ADD
|
ROCKSDB_BLOCK_CACHE_ADD
|
||||||
ROCKSDB_BLOCK_CACHE_DATA_HIT
|
ROCKSDB_BLOCK_CACHE_DATA_HIT
|
||||||
ROCKSDB_BLOCK_CACHE_DATA_MISS
|
ROCKSDB_BLOCK_CACHE_DATA_MISS
|
||||||
@@ -1572,6 +1595,16 @@ ROCKSDB_NUMBER_SUPERVERSION_CLEANUPS
|
|||||||
ROCKSDB_NUMBER_SUPERVERSION_RELEASES
|
ROCKSDB_NUMBER_SUPERVERSION_RELEASES
|
||||||
ROCKSDB_RATE_LIMIT_DELAY_MILLIS
|
ROCKSDB_RATE_LIMIT_DELAY_MILLIS
|
||||||
ROCKSDB_SNAPSHOT_CONFLICT_ERRORS
|
ROCKSDB_SNAPSHOT_CONFLICT_ERRORS
|
||||||
|
ROCKSDB_STALL_L0_FILE_COUNT_LIMIT_SLOWDOWNS
|
||||||
|
ROCKSDB_STALL_LOCKED_L0_FILE_COUNT_LIMIT_SLOWDOWNS
|
||||||
|
ROCKSDB_STALL_L0_FILE_COUNT_LIMIT_STOPS
|
||||||
|
ROCKSDB_STALL_LOCKED_L0_FILE_COUNT_LIMIT_STOPS
|
||||||
|
ROCKSDB_STALL_PENDING_COMPACTION_LIMIT_STOPS
|
||||||
|
ROCKSDB_STALL_PENDING_COMPACTION_LIMIT_SLOWDOWNS
|
||||||
|
ROCKSDB_STALL_MEMTABLE_LIMIT_STOPS
|
||||||
|
ROCKSDB_STALL_MEMTABLE_LIMIT_SLOWDOWNS
|
||||||
|
ROCKSDB_STALL_TOTAL_STOPS
|
||||||
|
ROCKSDB_STALL_TOTAL_SLOWDOWNS
|
||||||
ROCKSDB_STALL_MICROS
|
ROCKSDB_STALL_MICROS
|
||||||
ROCKSDB_WAL_BYTES
|
ROCKSDB_WAL_BYTES
|
||||||
ROCKSDB_WAL_GROUP_SYNCS
|
ROCKSDB_WAL_GROUP_SYNCS
|
||||||
@@ -1598,6 +1631,7 @@ ROCKSDB_MEMTABLE_TOTAL
|
|||||||
ROCKSDB_MEMTABLE_UNFLUSHED
|
ROCKSDB_MEMTABLE_UNFLUSHED
|
||||||
ROCKSDB_QUERIES_POINT
|
ROCKSDB_QUERIES_POINT
|
||||||
ROCKSDB_QUERIES_RANGE
|
ROCKSDB_QUERIES_RANGE
|
||||||
|
ROCKSDB_COVERED_SECONDARY_KEY_LOOKUPS
|
||||||
ROCKSDB_BLOCK_CACHE_ADD
|
ROCKSDB_BLOCK_CACHE_ADD
|
||||||
ROCKSDB_BLOCK_CACHE_DATA_HIT
|
ROCKSDB_BLOCK_CACHE_DATA_HIT
|
||||||
ROCKSDB_BLOCK_CACHE_DATA_MISS
|
ROCKSDB_BLOCK_CACHE_DATA_MISS
|
||||||
@@ -1650,6 +1684,16 @@ ROCKSDB_NUMBER_SUPERVERSION_CLEANUPS
|
|||||||
ROCKSDB_NUMBER_SUPERVERSION_RELEASES
|
ROCKSDB_NUMBER_SUPERVERSION_RELEASES
|
||||||
ROCKSDB_RATE_LIMIT_DELAY_MILLIS
|
ROCKSDB_RATE_LIMIT_DELAY_MILLIS
|
||||||
ROCKSDB_SNAPSHOT_CONFLICT_ERRORS
|
ROCKSDB_SNAPSHOT_CONFLICT_ERRORS
|
||||||
|
ROCKSDB_STALL_L0_FILE_COUNT_LIMIT_SLOWDOWNS
|
||||||
|
ROCKSDB_STALL_LOCKED_L0_FILE_COUNT_LIMIT_SLOWDOWNS
|
||||||
|
ROCKSDB_STALL_L0_FILE_COUNT_LIMIT_STOPS
|
||||||
|
ROCKSDB_STALL_LOCKED_L0_FILE_COUNT_LIMIT_STOPS
|
||||||
|
ROCKSDB_STALL_PENDING_COMPACTION_LIMIT_STOPS
|
||||||
|
ROCKSDB_STALL_PENDING_COMPACTION_LIMIT_SLOWDOWNS
|
||||||
|
ROCKSDB_STALL_MEMTABLE_LIMIT_STOPS
|
||||||
|
ROCKSDB_STALL_MEMTABLE_LIMIT_SLOWDOWNS
|
||||||
|
ROCKSDB_STALL_TOTAL_STOPS
|
||||||
|
ROCKSDB_STALL_TOTAL_SLOWDOWNS
|
||||||
ROCKSDB_STALL_MICROS
|
ROCKSDB_STALL_MICROS
|
||||||
ROCKSDB_WAL_BYTES
|
ROCKSDB_WAL_BYTES
|
||||||
ROCKSDB_WAL_GROUP_SYNCS
|
ROCKSDB_WAL_GROUP_SYNCS
|
||||||
@@ -2149,7 +2193,9 @@ SET @old_mode = @@sql_mode;
|
|||||||
SET sql_mode = 'strict_all_tables';
|
SET sql_mode = 'strict_all_tables';
|
||||||
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb;
|
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb;
|
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb;
|
||||||
|
set global rocksdb_large_prefix=0;
|
||||||
insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde');
|
insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde');
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a b c
|
a b c
|
||||||
@@ -2170,7 +2216,7 @@ a b c
|
|||||||
3 3abcde 3abcde
|
3 3abcde 3abcde
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(2255))) engine=rocksdb;
|
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(2255))) engine=rocksdb;
|
||||||
ERROR 42000: Specified key was too long; max key length is 2048 bytes
|
ERROR 42000: Specified key was too long; max key length is 767 bytes
|
||||||
SET sql_mode = @old_mode;
|
SET sql_mode = @old_mode;
|
||||||
drop table t0;
|
drop table t0;
|
||||||
#
|
#
|
||||||
|
@@ -7,17 +7,8 @@ CREATE TABLE t2 (j INT, PRIMARY KEY (j) COMMENT 'rev:cf_t2') ENGINE = ROCKSDB;
|
|||||||
CREATE TABLE t3 (k INT, PRIMARY KEY (k) COMMENT 'cf_t1') ENGINE = ROCKSDB;
|
CREATE TABLE t3 (k INT, PRIMARY KEY (k) COMMENT 'cf_t1') ENGINE = ROCKSDB;
|
||||||
CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB
|
CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB
|
||||||
PARTITION BY KEY(l) PARTITIONS 4;
|
PARTITION BY KEY(l) PARTITIONS 4;
|
||||||
SET GLOBAL rocksdb_force_flush_memtable_now=1;
|
SET @save.rocksdb_max_background_jobs= @@global.rocksdb_max_background_jobs;
|
||||||
SHOW ENGINE rocksdb STATUS;
|
SET GLOBAL rocksdb_max_background_jobs= 1;
|
||||||
Type Name Status
|
|
||||||
STATISTICS # #
|
|
||||||
DBSTATS # #
|
|
||||||
CF_COMPACTION # #
|
|
||||||
CF_COMPACTION # #
|
|
||||||
CF_COMPACTION # #
|
|
||||||
CF_COMPACTION # #
|
|
||||||
MEMORY_STATS # #
|
|
||||||
BG_THREADS # #
|
|
||||||
INSERT INTO t1 VALUES (1), (2), (3);
|
INSERT INTO t1 VALUES (1), (2), (3);
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
@@ -30,6 +21,19 @@ INSERT INTO t4 VALUES (1), (2), (3), (4), (5);
|
|||||||
SELECT COUNT(*) FROM t4;
|
SELECT COUNT(*) FROM t4;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
5
|
5
|
||||||
|
SET GLOBAL rocksdb_force_flush_memtable_now=1;
|
||||||
|
SET GLOBAL rocksdb_compact_cf="cf_t1";
|
||||||
|
SHOW ENGINE rocksdb STATUS;
|
||||||
|
Type Name Status
|
||||||
|
STATISTICS # #
|
||||||
|
DBSTATS # #
|
||||||
|
CF_COMPACTION # #
|
||||||
|
CF_COMPACTION # #
|
||||||
|
CF_COMPACTION # #
|
||||||
|
CF_COMPACTION # #
|
||||||
|
MEMORY_STATS # #
|
||||||
|
BG_THREADS # #
|
||||||
|
BG_THREADS # #
|
||||||
SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS;
|
SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS;
|
||||||
CF_NAME STAT_TYPE VALUE
|
CF_NAME STAT_TYPE VALUE
|
||||||
__system__ NUM_IMMUTABLE_MEM_TABLE #
|
__system__ NUM_IMMUTABLE_MEM_TABLE #
|
||||||
@@ -356,7 +360,7 @@ Type Name Status
|
|||||||
SHOW ENGINE ALL MUTEX;
|
SHOW ENGINE ALL MUTEX;
|
||||||
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
||||||
Type Name Status
|
Type Name Status
|
||||||
SNAPSHOTS rocksdb
|
rocksdb
|
||||||
============================================================
|
============================================================
|
||||||
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
============================================================
|
============================================================
|
||||||
@@ -364,6 +368,7 @@ TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
|||||||
SNAPSHOTS
|
SNAPSHOTS
|
||||||
---------
|
---------
|
||||||
LIST OF SNAPSHOTS FOR EACH SESSION:
|
LIST OF SNAPSHOTS FOR EACH SESSION:
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
=========================================
|
=========================================
|
||||||
@@ -371,7 +376,7 @@ END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
|||||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
SHOW ENGINE rocksdb TRANSACTION STATUS;
|
||||||
Type Name Status
|
Type Name Status
|
||||||
SNAPSHOTS rocksdb
|
rocksdb
|
||||||
============================================================
|
============================================================
|
||||||
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
============================================================
|
============================================================
|
||||||
@@ -384,8 +389,10 @@ MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
|
|||||||
SHOW ENGINE rocksdb TRANSACTION STATUS
|
SHOW ENGINE rocksdb TRANSACTION STATUS
|
||||||
lock count 0, write count 0
|
lock count 0, write count 0
|
||||||
insert count 0, update count 0, delete count 0
|
insert count 0, update count 0, delete count 0
|
||||||
|
----------LATEST DETECTED DEADLOCKS----------
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
|
SET GLOBAL rocksdb_max_background_jobs= @save.rocksdb_max_background_jobs;
|
||||||
|
@@ -0,0 +1,4 @@
|
|||||||
|
CREATE TABLE t1 (pk int primary key) ENGINE=ROCKSDB;
|
||||||
|
set session debug="+d,gen_sql_table_name";
|
||||||
|
rename table t1 to t2;
|
||||||
|
set session debug= "-d,gen_sql_table_name";
|
@@ -1,4 +1,6 @@
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
call mtr.add_suppression("Column family 'cf1' not found");
|
||||||
|
call mtr.add_suppression("Column family 'rev:cf2' not found");
|
||||||
set global rocksdb_compact_cf = 'cf1';
|
set global rocksdb_compact_cf = 'cf1';
|
||||||
set global rocksdb_compact_cf = 'rev:cf2';
|
set global rocksdb_compact_cf = 'rev:cf2';
|
||||||
set global rocksdb_signal_drop_index_thread = 1;
|
set global rocksdb_signal_drop_index_thread = 1;
|
||||||
|
@@ -337,9 +337,7 @@ b INT
|
|||||||
) ENGINE=rocksdb
|
) ENGINE=rocksdb
|
||||||
COMMENT='ttl_duration=100;';
|
COMMENT='ttl_duration=100;';
|
||||||
ALTER TABLE t1 DROP PRIMARY KEY;
|
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||||
ERROR HY000: TTL support is currently disabled when table has secondary indexes or hidden PK.
|
ERROR HY000: TTL support is currently disabled when table has a hidden PK.
|
||||||
ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE;
|
|
||||||
ERROR HY000: TTL support is currently disabled when table has secondary indexes or hidden PK.
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a INT PRIMARY KEY,
|
a INT PRIMARY KEY,
|
||||||
|
709
storage/rocksdb/mysql-test/rocksdb/r/ttl_secondary.result
Normal file
709
storage/rocksdb/mysql-test/rocksdb/r/ttl_secondary.result
Normal file
@@ -0,0 +1,709 @@
|
|||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`),
|
||||||
|
KEY kb (`b`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 3, UNIX_TIMESTAMP(), 5);
|
||||||
|
INSERT INTO t1 values (2, 4, UNIX_TIMESTAMP(), 6);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 3, 5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (2, 4, 6, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int,
|
||||||
|
c int,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kbc (b, c)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, NULL, NULL, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (2, NULL, NULL, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64),
|
||||||
|
`c` varbinary(256),
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`a`),
|
||||||
|
KEY kbc (`b`, `c`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', NULL, 'bc', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'efghijk', NULL, UNIX_TIMESTAMP(), 'l');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 3, 5);
|
||||||
|
INSERT INTO t1 values (2, 4, 6);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a, ts),
|
||||||
|
KEY kt (ts)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;ttl_col=ts;';
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (2, UNIX_TIMESTAMP());
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = -10;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 10;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a, ts),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 3, UNIX_TIMESTAMP(), 5);
|
||||||
|
INSERT INTO t1 values (2, 4, UNIX_TIMESTAMP(), 6);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64),
|
||||||
|
`c` varbinary(256),
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`a`, `ts`),
|
||||||
|
KEY kb (`b`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', NULL, 'bc', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('de', 'fghijk', NULL, UNIX_TIMESTAMP(), 'l');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT NOT NULL,
|
||||||
|
b varbinary(64) NOT NULL,
|
||||||
|
c varbinary(256) NOT NULL,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
value mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (b,a,c),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=10;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values (2, 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
INSERT INTO t1 values (3, 'i', 'j', UNIX_TIMESTAMP(), 'k');
|
||||||
|
INSERT INTO t1 values (4, 'm', 'n', UNIX_TIMESTAMP(), 'o');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = -3600;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
3
|
||||||
|
4
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
ts bigint(20),
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
ERROR HY000: TTL column (ts) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
ts int,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
ERROR HY000: TTL column (ts) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=abc;';
|
||||||
|
ERROR HY000: TTL duration (abc) in MyRocks must be an unsigned non-null 64-bit integer.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=abc;';
|
||||||
|
ERROR HY000: TTL column (abc) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_col=abc;';
|
||||||
|
ERROR HY000: TTL column (abc) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=500;';
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT PRIMARY KEY,
|
||||||
|
b INT NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=100;';
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
ALTER TABLE t1 COMMENT = 'ttl_duration=1';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) NOT NULL,
|
||||||
|
`b` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`a`),
|
||||||
|
KEY `kb` (`b`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 COMMENT='ttl_duration=1'
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT PRIMARY KEY,
|
||||||
|
b INT,
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=100;';
|
||||||
|
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||||
|
ERROR HY000: TTL support is currently disabled when table has a hidden PK.
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT PRIMARY KEY,
|
||||||
|
b INT,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;';
|
||||||
|
INSERT INTO t1 VALUES (1,1);
|
||||||
|
INSERT INTO t1 VALUES (2,2);
|
||||||
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(b);
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = -3600;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int,
|
||||||
|
PRIMARY KEY (a,b),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='asdadfasdfsadfadf ;ttl_duration=1; asfasdfasdfadfa';
|
||||||
|
INSERT INTO t1 values (UNIX_TIMESTAMP(), 1);
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
ALTER TABLE t1 COMMENT = 'adsf;;ttl_duration=5;asfasdfa;ttl_col=a;asdfasdf;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
INSERT INTO t1 values (UNIX_TIMESTAMP(), 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, 0);
|
||||||
|
INSERT INTO t1 values (3, 0);
|
||||||
|
INSERT INTO t1 values (5, 0);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
INSERT INTO t1 values (7, 0);
|
||||||
|
INSERT INTO t1 values (9, 0);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
UPDATE t1 SET a=a+1;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
10 0
|
||||||
|
2 0
|
||||||
|
4 0
|
||||||
|
6 0
|
||||||
|
8 0
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
10 0
|
||||||
|
8 0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;ttl_col=b;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
5
|
||||||
|
7
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (2, 1);
|
||||||
|
INSERT INTO t1 values (3, 1);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_enable_ttl=0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
set global rocksdb_enable_ttl=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
variable_value-@c
|
||||||
|
6
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=100;';
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
variable_value-@c
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a, b),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;ttl_col=b;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
5
|
||||||
|
7
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a, b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;ttl_col=b;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT a FROM t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
5
|
||||||
|
7
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
SELECT a FROM t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
CREATE INDEX kb on t1 (b);
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
CREATE INDEX kb on t1 (b);
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`, `ts`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
CREATE INDEX kb on t1 (b);
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
@@ -0,0 +1,494 @@
|
|||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b int NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
variable_value-@c
|
||||||
|
2
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b BIGINT UNSIGNED NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=10;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
INSERT INTO t1 values (2, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
# 1 should be hidden
|
||||||
|
SELECT a FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
# none should be hidden yet, compaction runs but records aren't expired
|
||||||
|
SELECT a FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
# all should be hidden now, even though compaction hasn't run again
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = -310;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
a
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = 0;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b int NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
INSERT INTO t1 values (5, 5);
|
||||||
|
INSERT INTO t1 values (7, 7);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
# should return nothing.
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
set global rocksdb_enable_ttl_read_filtering=0;
|
||||||
|
# should return everything
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
7 7
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
7 7
|
||||||
|
set global rocksdb_enable_ttl_read_filtering=1;
|
||||||
|
# should return nothing.
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Read filtering index scan tests (None of these queries should return any results)
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
c int,
|
||||||
|
PRIMARY KEY (a,b,c),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (0,0,0);
|
||||||
|
INSERT INTO t1 values (0,0,1);
|
||||||
|
INSERT INTO t1 values (0,1,0);
|
||||||
|
INSERT INTO t1 values (0,1,1);
|
||||||
|
INSERT INTO t1 values (1,1,2);
|
||||||
|
INSERT INTO t1 values (1,2,1);
|
||||||
|
INSERT INTO t1 values (1,2,2);
|
||||||
|
INSERT INTO t1 values (1,2,3);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a=1 AND b=2 AND c=2;
|
||||||
|
a b c
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a=1 AND b=2 AND c=2;
|
||||||
|
a b c
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a = 1;
|
||||||
|
a b c
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a = 1;
|
||||||
|
a b c
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a < 3;
|
||||||
|
max(a)
|
||||||
|
NULL
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a < 3;
|
||||||
|
max(a)
|
||||||
|
NULL
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a < 2 AND b = 1 AND c < 3;
|
||||||
|
max(a)
|
||||||
|
NULL
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a < 2 AND b = 1 AND c < 3;
|
||||||
|
max(a)
|
||||||
|
NULL
|
||||||
|
SELECT min(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a >= 1;
|
||||||
|
min(a)
|
||||||
|
NULL
|
||||||
|
SELECT min(a) FROM t1 FORCE INDEX (kb) WHERE a >= 1;
|
||||||
|
min(a)
|
||||||
|
NULL
|
||||||
|
SELECT min(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a > 1;
|
||||||
|
min(a)
|
||||||
|
NULL
|
||||||
|
SELECT min(a) FROM t1 FORCE INDEX (kb) WHERE a > 1;
|
||||||
|
min(a)
|
||||||
|
NULL
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a=1 and b in (1) order by c desc;
|
||||||
|
a b c
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a=1 and b in (1) order by c desc;
|
||||||
|
a b c
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a <=10;
|
||||||
|
max(a)
|
||||||
|
NULL
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a <=10;
|
||||||
|
max(a)
|
||||||
|
NULL
|
||||||
|
SELECT a FROM t1 FORCE INDEX (PRIMARY) WHERE a > 0 and a <= 2;
|
||||||
|
a
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb) WHERE a > 0 and a <= 2;
|
||||||
|
a
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
variable_value-@c
|
||||||
|
0
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
variable_value-@c
|
||||||
|
8
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Attempt to update expired value, should filter out
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
# No error is thrown here, under the hood index_next_with_direction is
|
||||||
|
# filtering out the record from being seen in the first place.
|
||||||
|
UPDATE t1 set a = 1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Ensure no rows can disappear in the middle of long-running transactions
|
||||||
|
# Also ensure repeatable-read works as expected
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b int NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;';
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
# Creating Snapshot (start transaction)
|
||||||
|
BEGIN;
|
||||||
|
# Nothing filtered out here
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
# Switching to connection 2
|
||||||
|
# compaction doesn't do anything since con1 snapshot is still open
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
# read filtered out, because on a different connection, on
|
||||||
|
# this connection the records have 'expired' already so they are filtered out
|
||||||
|
# even though they have not yet been removed by compaction
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
# Switching to connection 1
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
UPDATE t1 set a = a + 1;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
2 1
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
2 1
|
||||||
|
COMMIT;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
DROP TABLE t1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b int NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
# On Connection 1
|
||||||
|
# Creating Snapshot (start transaction)
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
# On Connection 2
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -2;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
INSERT INTO t1 values (5, 5);
|
||||||
|
INSERT INTO t1 values (7, 7);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
# On Connection 1
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
# On Connection 2
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
set global rocksdb_enable_ttl_read_filtering=0;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
7 7
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
7 7
|
||||||
|
set global rocksdb_enable_ttl_read_filtering=1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 100;
|
||||||
|
INSERT INTO t1 VALUES (1, 1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (2, 2, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (3, 3, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (4, 4, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (5, 5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (6, 6, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (7, 7, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (8, 8, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (9, 9, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (10, 10, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
# None are expired
|
||||||
|
SELECT a, b FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
4 4
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
7 7
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
10 10
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
UPDATE t1 SET ts=(UNIX_TIMESTAMP()+1) WHERE a IN (4, 7);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
# 4 and 7 should be gone
|
||||||
|
SELECT a, b FROM t1 FORCE INDEX (kb);
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
10 10
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
name VARCHAR(25) NOT NULL,
|
||||||
|
PRIMARY KEY (c1, c2),
|
||||||
|
KEY kc2 (c2)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -1200;
|
||||||
|
INSERT INTO t1 values (1,1,'a');
|
||||||
|
INSERT INTO t1 values (2,2,'b');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 1200;
|
||||||
|
INSERT INTO t1 values (3,3,'c');
|
||||||
|
INSERT INTO t1 values (4,4,'d');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -1200;
|
||||||
|
INSERT INTO t1 values (5,5,'e');
|
||||||
|
INSERT INTO t1 values (6,6,'f');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 1200;
|
||||||
|
INSERT INTO t1 values (7,7,'g');
|
||||||
|
INSERT INTO t1 values (8,8,'h');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2 name
|
||||||
|
3 3 c
|
||||||
|
4 4 d
|
||||||
|
7 7 g
|
||||||
|
8 8 h
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2 name
|
||||||
|
3 3 c
|
||||||
|
4 4 d
|
||||||
|
7 7 g
|
||||||
|
8 8 h
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE c1 > 5;
|
||||||
|
c1 c2 name
|
||||||
|
7 7 g
|
||||||
|
8 8 h
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2) WHERE c2 > 5;
|
||||||
|
c1 c2 name
|
||||||
|
7 7 g
|
||||||
|
8 8 h
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE 3 < c1 AND c1 < 6;
|
||||||
|
c1 c2 name
|
||||||
|
4 4 d
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2) WHERE 3 < c2 AND c2 < 6;
|
||||||
|
c1 c2 name
|
||||||
|
4 4 d
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1800;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
INSERT INTO t1 values (1,1);
|
||||||
|
INSERT INTO t1 values (2,2);
|
||||||
|
INSERT INTO t1 values (7,7);
|
||||||
|
INSERT INTO t1 values (10,10);
|
||||||
|
INSERT INTO t1 values (11,11);
|
||||||
|
INSERT INTO t1 values (12,12);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 450;
|
||||||
|
INSERT INTO t1 values (3,3);
|
||||||
|
INSERT INTO t1 values (4,4);
|
||||||
|
INSERT INTO t1 values (8,8);
|
||||||
|
INSERT INTO t1 values (16,16);
|
||||||
|
INSERT INTO t1 values (17,17);
|
||||||
|
INSERT INTO t1 values (18,18);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 900;
|
||||||
|
INSERT INTO t1 values (5,5);
|
||||||
|
INSERT INTO t1 values (6,6);
|
||||||
|
INSERT INTO t1 values (9,9);
|
||||||
|
INSERT INTO t1 values (13,13);
|
||||||
|
INSERT INTO t1 values (14,14);
|
||||||
|
INSERT INTO t1 values (15,15);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
# Should see everything
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
4 4
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
7 7
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
10 10
|
||||||
|
11 11
|
||||||
|
12 12
|
||||||
|
13 13
|
||||||
|
14 14
|
||||||
|
15 15
|
||||||
|
16 16
|
||||||
|
17 17
|
||||||
|
18 18
|
||||||
|
# Should have no records from the first group
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = -1800;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
3 3
|
||||||
|
4 4
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
13 13
|
||||||
|
14 14
|
||||||
|
15 15
|
||||||
|
16 16
|
||||||
|
17 17
|
||||||
|
18 18
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a > 5 AND a < 15;
|
||||||
|
a b
|
||||||
|
6 6
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
13 13
|
||||||
|
14 14
|
||||||
|
# Should only have records from the last group
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = -1800 - 450;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
9 9
|
||||||
|
13 13
|
||||||
|
14 14
|
||||||
|
15 15
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a < 10;
|
||||||
|
a b
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
9 9
|
||||||
|
# Should be empty
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = -1800 - 900;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = 0;
|
||||||
|
DROP TABLE t1;
|
@@ -0,0 +1,82 @@
|
|||||||
|
CREATE TABLE t1 (
|
||||||
|
a int NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b) COMMENT 'kb',
|
||||||
|
KEY kc (c) COMMENT 'kc'
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT='ttl_duration=1';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2, 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 100;
|
||||||
|
INSERT INTO t1 values (3, 3, 3);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='kb';
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b) COMMENT 'kb',
|
||||||
|
KEY kc (c) COMMENT 'kc'
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT='ttl_duration=1';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2, 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 100;
|
||||||
|
INSERT INTO t1 values (3, 3, 3);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b) COMMENT 'kb',
|
||||||
|
KEY kc (c) COMMENT 'kc'
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT='ttl_duration=1';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2, 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 100;
|
||||||
|
INSERT INTO t1 values (3, 3, 3);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_compact_cf='kb';
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc);
|
||||||
|
a b c
|
||||||
|
3 3 3
|
||||||
|
DROP TABLE t1;
|
@@ -0,0 +1,389 @@
|
|||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
PRIMARY KEY (`c1`),
|
||||||
|
KEY kc2 (`c2`)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="custom_p0_ttl_duration=1;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 4, 7),
|
||||||
|
PARTITION custom_p1 VALUES IN (2, 5, 8),
|
||||||
|
PARTITION custom_p2 VALUES IN (3, 6, 9)
|
||||||
|
);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -3600;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
INSERT INTO t1 values (4, 4);
|
||||||
|
INSERT INTO t1 values (5, 5);
|
||||||
|
INSERT INTO t1 values (6, 6);
|
||||||
|
INSERT INTO t1 values (7, 7);
|
||||||
|
INSERT INTO t1 values (8, 8);
|
||||||
|
INSERT INTO t1 values (9, 9);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
4 4
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
7 7
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
4 4
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
7 7
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
name VARCHAR(25) NOT NULL,
|
||||||
|
PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=my_custom_cf;custom_p2_cfname=baz',
|
||||||
|
KEY kc2 (`c2`)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="custom_p0_ttl_duration=1;custom_p1_ttl_duration=7;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 4, 7),
|
||||||
|
PARTITION custom_p1 VALUES IN (2, 5, 8),
|
||||||
|
PARTITION custom_p2 VALUES IN (3, 6, 9)
|
||||||
|
);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -1200;
|
||||||
|
INSERT INTO t1 values (1,1,'a');
|
||||||
|
INSERT INTO t1 values (4,4,'aaaa');
|
||||||
|
INSERT INTO t1 values (7,7,'aaaaaaa');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 1200;
|
||||||
|
INSERT INTO t1 values (2,2,'aa');
|
||||||
|
INSERT INTO t1 values (3,3,'aaa');
|
||||||
|
INSERT INTO t1 values (5,5,'aaaaa');
|
||||||
|
INSERT INTO t1 values (6,6,'aaaaaa');
|
||||||
|
INSERT INTO t1 values (8,8,'aaaaaaaa');
|
||||||
|
INSERT INTO t1 values (9,9,'aaaaaaaaa');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2 name
|
||||||
|
1 1 a
|
||||||
|
2 2 aa
|
||||||
|
3 3 aaa
|
||||||
|
4 4 aaaa
|
||||||
|
5 5 aaaaa
|
||||||
|
6 6 aaaaaa
|
||||||
|
7 7 aaaaaaa
|
||||||
|
8 8 aaaaaaaa
|
||||||
|
9 9 aaaaaaaaa
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2 name
|
||||||
|
1 1 a
|
||||||
|
2 2 aa
|
||||||
|
3 3 aaa
|
||||||
|
4 4 aaaa
|
||||||
|
5 5 aaaaa
|
||||||
|
6 6 aaaaaa
|
||||||
|
7 7 aaaaaaa
|
||||||
|
8 8 aaaaaaaa
|
||||||
|
9 9 aaaaaaaaa
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set @@global.rocksdb_compact_cf = 'foo';
|
||||||
|
set @@global.rocksdb_compact_cf = 'my_custom_cf';
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2 name
|
||||||
|
2 2 aa
|
||||||
|
3 3 aaa
|
||||||
|
5 5 aaaaa
|
||||||
|
6 6 aaaaaa
|
||||||
|
8 8 aaaaaaaa
|
||||||
|
9 9 aaaaaaaaa
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2 name
|
||||||
|
2 2 aa
|
||||||
|
3 3 aaa
|
||||||
|
5 5 aaaaa
|
||||||
|
6 6 aaaaaa
|
||||||
|
8 8 aaaaaaaa
|
||||||
|
9 9 aaaaaaaaa
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set @@global.rocksdb_compact_cf = 'foo';
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2 name
|
||||||
|
2 2 aa
|
||||||
|
3 3 aaa
|
||||||
|
5 5 aaaaa
|
||||||
|
6 6 aaaaaa
|
||||||
|
8 8 aaaaaaaa
|
||||||
|
9 9 aaaaaaaaa
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2 name
|
||||||
|
2 2 aa
|
||||||
|
3 3 aaa
|
||||||
|
5 5 aaaaa
|
||||||
|
6 6 aaaaaa
|
||||||
|
8 8 aaaaaaaa
|
||||||
|
9 9 aaaaaaaaa
|
||||||
|
set @@global.rocksdb_compact_cf = 'my_custom_cf';
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2 name
|
||||||
|
3 3 aaa
|
||||||
|
6 6 aaaaaa
|
||||||
|
9 9 aaaaaaaaa
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2 name
|
||||||
|
3 3 aaa
|
||||||
|
6 6 aaaaaa
|
||||||
|
9 9 aaaaaaaaa
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
name VARCHAR(25) NOT NULL,
|
||||||
|
event DATE,
|
||||||
|
PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
|
||||||
|
KEY kc2 (c2)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 2, 3),
|
||||||
|
PARTITION custom_p1 VALUES IN (4, 5, 6),
|
||||||
|
PARTITION custom_p2 VALUES IN (7, 8, 9)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (1, 1, "one", null);
|
||||||
|
INSERT INTO t1 VALUES (2, 2, "two", null);
|
||||||
|
INSERT INTO t1 VALUES (3, 3, "three", null);
|
||||||
|
INSERT INTO t1 VALUES (4, 4, "four", null);
|
||||||
|
INSERT INTO t1 VALUES (5, 5, "five", null);
|
||||||
|
INSERT INTO t1 VALUES (6, 6, "six", null);
|
||||||
|
INSERT INTO t1 VALUES (7, 7, "seven", null);
|
||||||
|
INSERT INTO t1 VALUES (8, 8, "eight", null);
|
||||||
|
INSERT INTO t1 VALUES (9, 9, "nine", null);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2 name event
|
||||||
|
1 1 one NULL
|
||||||
|
2 2 two NULL
|
||||||
|
3 3 three NULL
|
||||||
|
4 4 four NULL
|
||||||
|
5 5 five NULL
|
||||||
|
6 6 six NULL
|
||||||
|
7 7 seven NULL
|
||||||
|
8 8 eight NULL
|
||||||
|
9 9 nine NULL
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2 name event
|
||||||
|
1 1 one NULL
|
||||||
|
2 2 two NULL
|
||||||
|
3 3 three NULL
|
||||||
|
4 4 four NULL
|
||||||
|
5 5 five NULL
|
||||||
|
6 6 six NULL
|
||||||
|
7 7 seven NULL
|
||||||
|
8 8 eight NULL
|
||||||
|
9 9 nine NULL
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 600;
|
||||||
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL DEFAULT '0',
|
||||||
|
`c2` int(11) NOT NULL DEFAULT '0',
|
||||||
|
`name` varchar(25) NOT NULL,
|
||||||
|
`event` date DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
|
||||||
|
KEY `kc2` (`c2`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 COMMENT='custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;'
|
||||||
|
/*!50100 PARTITION BY LIST (c1)
|
||||||
|
(PARTITION custom_p0 VALUES IN (1,2,3) ENGINE = ROCKSDB,
|
||||||
|
PARTITION custom_p1 VALUES IN (4,5,6) ENGINE = ROCKSDB,
|
||||||
|
PARTITION custom_p2 VALUES IN (7,8,9) ENGINE = ROCKSDB) */
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 100;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set @@global.rocksdb_compact_cf = 'baz';
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2 name event
|
||||||
|
1 1 one NULL
|
||||||
|
2 2 two NULL
|
||||||
|
3 3 three NULL
|
||||||
|
4 4 four NULL
|
||||||
|
5 5 five NULL
|
||||||
|
6 6 six NULL
|
||||||
|
7 7 seven NULL
|
||||||
|
8 8 eight NULL
|
||||||
|
9 9 nine NULL
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2 name event
|
||||||
|
1 1 one NULL
|
||||||
|
2 2 two NULL
|
||||||
|
3 3 three NULL
|
||||||
|
4 4 four NULL
|
||||||
|
5 5 five NULL
|
||||||
|
6 6 six NULL
|
||||||
|
7 7 seven NULL
|
||||||
|
8 8 eight NULL
|
||||||
|
9 9 nine NULL
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 1200;
|
||||||
|
set @@global.rocksdb_compact_cf = 'foo';
|
||||||
|
set @@global.rocksdb_compact_cf = 'baz';
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2 name event
|
||||||
|
1 1 one NULL
|
||||||
|
2 2 two NULL
|
||||||
|
3 3 three NULL
|
||||||
|
4 4 four NULL
|
||||||
|
5 5 five NULL
|
||||||
|
6 6 six NULL
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2 name event
|
||||||
|
1 1 one NULL
|
||||||
|
2 2 two NULL
|
||||||
|
3 3 three NULL
|
||||||
|
4 4 four NULL
|
||||||
|
5 5 five NULL
|
||||||
|
6 6 six NULL
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 BIGINT,
|
||||||
|
c2 BIGINT UNSIGNED NOT NULL,
|
||||||
|
name VARCHAR(25) NOT NULL,
|
||||||
|
event DATE,
|
||||||
|
PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
|
||||||
|
KEY kc2 (`c2`)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="ttl_duration=1;custom_p1_ttl_duration=100;custom_p1_ttl_col=c2;custom_p2_ttl_duration=5000;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 2, 3),
|
||||||
|
PARTITION custom_p1 VALUES IN (4, 5, 6),
|
||||||
|
PARTITION custom_p2 VALUES IN (7, 8, 9)
|
||||||
|
);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 VALUES (1, UNIX_TIMESTAMP(), "one", null);
|
||||||
|
INSERT INTO t1 VALUES (2, UNIX_TIMESTAMP(), "two", null);
|
||||||
|
INSERT INTO t1 VALUES (3, UNIX_TIMESTAMP(), "three", null);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
INSERT INTO t1 VALUES (4, UNIX_TIMESTAMP(), "four", null);
|
||||||
|
INSERT INTO t1 VALUES (5, UNIX_TIMESTAMP(), "five", null);
|
||||||
|
INSERT INTO t1 VALUES (6, UNIX_TIMESTAMP(), "six", null);
|
||||||
|
INSERT INTO t1 VALUES (7, UNIX_TIMESTAMP(), "seven", null);
|
||||||
|
INSERT INTO t1 VALUES (8, UNIX_TIMESTAMP(), "eight", null);
|
||||||
|
INSERT INTO t1 VALUES (9, UNIX_TIMESTAMP(), "nine", null);
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set @@global.rocksdb_compact_cf = 'foo';
|
||||||
|
set @@global.rocksdb_compact_cf = 'baz';
|
||||||
|
set @@global.rocksdb_compact_cf = 'bar';
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
SELECT c1 FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
SELECT c1 FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 600;
|
||||||
|
set @@global.rocksdb_compact_cf = 'bar';
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
SELECT c1 FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
SELECT c1 FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;'
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="custom_p0_ttl_duration=1;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 4, 7),
|
||||||
|
PARTITION custom_p1 VALUES IN (2, 5, 8),
|
||||||
|
PARTITION custom_p2 VALUES IN (3, 6, 9)
|
||||||
|
);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -3600;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (4, 4);
|
||||||
|
INSERT INTO t1 values (7, 7);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
INSERT INTO t1 values (2, 2);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
INSERT INTO t1 values (5, 5);
|
||||||
|
INSERT INTO t1 values (6, 6);
|
||||||
|
INSERT INTO t1 values (8, 8);
|
||||||
|
INSERT INTO t1 values (9, 9);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c1 c2
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
4 4
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
7 7
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
CREATE INDEX kc2 on t1 (c2);
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='foo';
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
c1 c2
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
c1 c2
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
8 8
|
||||||
|
9 9
|
||||||
|
DROP TABLE t1;
|
@@ -2,35 +2,26 @@ SET GLOBAL rocksdb_write_disable_wal=false;
|
|||||||
SET GLOBAL rocksdb_write_ignore_missing_column_families=true;
|
SET GLOBAL rocksdb_write_ignore_missing_column_families=true;
|
||||||
create table aaa (id int primary key, i int) engine rocksdb;
|
create table aaa (id int primary key, i int) engine rocksdb;
|
||||||
set @save_rocksdb_flush_log_at_trx_commit=@@global.rocksdb_flush_log_at_trx_commit;
|
set @save_rocksdb_flush_log_at_trx_commit=@@global.rocksdb_flush_log_at_trx_commit;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
||||||
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
insert aaa(id, i) values(1,1);
|
insert aaa(id, i) values(1,1);
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
variable_value-@a
|
variable_value-@a
|
||||||
0
|
1
|
||||||
insert aaa(id, i) values(2,1);
|
insert aaa(id, i) values(2,1);
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
variable_value-@a
|
variable_value-@a
|
||||||
0
|
2
|
||||||
insert aaa(id, i) values(3,1);
|
insert aaa(id, i) values(3,1);
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
variable_value-@a
|
variable_value-@a
|
||||||
0
|
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
|
||||||
insert aaa(id, i) values(4,1);
|
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
|
||||||
variable_value-@a
|
|
||||||
1
|
|
||||||
insert aaa(id, i) values(5,1);
|
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
|
||||||
variable_value-@a
|
|
||||||
2
|
|
||||||
insert aaa(id, i) values(6,1);
|
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
|
||||||
variable_value-@a
|
|
||||||
3
|
3
|
||||||
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
|
||||||
|
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
|
insert aaa(id, i) values(4,1);
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=2;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=2;
|
||||||
insert aaa(id, i) values(7,1);
|
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
|
insert aaa(id, i) values(5,1);
|
||||||
truncate table aaa;
|
truncate table aaa;
|
||||||
drop table aaa;
|
drop table aaa;
|
||||||
set @@global.rocksdb_flush_log_at_trx_commit=@save_rocksdb_flush_log_at_trx_commit;
|
set @@global.rocksdb_flush_log_at_trx_commit=@save_rocksdb_flush_log_at_trx_commit;
|
||||||
|
@@ -13,7 +13,7 @@ USE mysqlslap;
|
|||||||
CREATE TABLE t1(id BIGINT AUTO_INCREMENT, value BIGINT, PRIMARY KEY(id)) ENGINE=rocksdb;
|
CREATE TABLE t1(id BIGINT AUTO_INCREMENT, value BIGINT, PRIMARY KEY(id)) ENGINE=rocksdb;
|
||||||
|
|
||||||
--echo # 2PC enabled, MyRocks durability enabled
|
--echo # 2PC enabled, MyRocks durability enabled
|
||||||
SET GLOBAL rocksdb_enable_2pc=0;
|
SET GLOBAL rocksdb_enable_2pc=1;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
||||||
|
|
||||||
--echo ## 2PC + durability + single thread
|
--echo ## 2PC + durability + single thread
|
||||||
@@ -28,7 +28,7 @@ select case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true'
|
|||||||
|
|
||||||
|
|
||||||
--echo # 2PC enabled, MyRocks durability disabled
|
--echo # 2PC enabled, MyRocks durability disabled
|
||||||
SET GLOBAL rocksdb_enable_2pc=0;
|
SET GLOBAL rocksdb_enable_2pc=1;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
|
||||||
|
|
||||||
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
@@ -41,7 +41,7 @@ select case when variable_value-@c = 0 then 'true' else 'false' end from informa
|
|||||||
|
|
||||||
|
|
||||||
--echo # 2PC disabled, MyRocks durability enabled
|
--echo # 2PC disabled, MyRocks durability enabled
|
||||||
SET GLOBAL rocksdb_enable_2pc=1;
|
SET GLOBAL rocksdb_enable_2pc=0;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
||||||
|
|
||||||
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
|
||||||
|
@@ -186,8 +186,8 @@ connect (con1,localhost,root,,);
|
|||||||
--echo # Switch to connection con1
|
--echo # Switch to connection con1
|
||||||
connection con1;
|
connection con1;
|
||||||
|
|
||||||
show global variables like 'rocksdb_bulk_load';
|
show global variables like 'rocksdb_bulk_load%';
|
||||||
show session variables like 'rocksdb_bulk_load';
|
show session variables like 'rocksdb_bulk_load%';
|
||||||
|
|
||||||
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
|
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
|
||||||
|
|
||||||
@@ -255,9 +255,9 @@ SET @prior_rocksdb_merge_buf_size = @@rocksdb_merge_buf_size;
|
|||||||
|
|
||||||
SET global rocksdb_strict_collation_check = off;
|
SET global rocksdb_strict_collation_check = off;
|
||||||
SET session rocksdb_merge_combine_read_size = 566;
|
SET session rocksdb_merge_combine_read_size = 566;
|
||||||
SET session rocksdb_merge_buf_size = 336;
|
SET session rocksdb_merge_buf_size = 340;
|
||||||
|
|
||||||
show variables like '%rocksdb_bulk_load%';
|
show variables like 'rocksdb_bulk_load%';
|
||||||
CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB;
|
CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB;
|
||||||
INSERT INTO t1 (a) VALUES (REPEAT("a", 80));
|
INSERT INTO t1 (a) VALUES (REPEAT("a", 80));
|
||||||
INSERT INTO t1 (a) VALUES (REPEAT("a", 80));
|
INSERT INTO t1 (a) VALUES (REPEAT("a", 80));
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
--source include/have_rocksdb.inc
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
### Bulk load ###
|
||||||
CREATE TABLE t1(pk INT, PRIMARY KEY(pk));
|
CREATE TABLE t1(pk INT, PRIMARY KEY(pk));
|
||||||
|
|
||||||
# Make sure we get an error with out of order keys during bulk load
|
# Make sure we get an error with out of order keys during bulk load
|
||||||
@@ -36,4 +37,29 @@ SET rocksdb_bulk_load=0;
|
|||||||
--enable_reconnect
|
--enable_reconnect
|
||||||
--source include/wait_until_connected_again.inc
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
|
||||||
|
### Bulk load with unsorted PKs ###
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=1;
|
||||||
|
|
||||||
|
# We should not get an error with out of order PKs
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
INSERT INTO t1 VALUES(100);
|
||||||
|
INSERT INTO t1 VALUES(101);
|
||||||
|
INSERT INTO t1 VALUES(99);
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
|
||||||
|
# We should get an error with duplicate PKs in the same bulk load
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
INSERT INTO t1 VALUES(201);
|
||||||
|
INSERT INTO t1 VALUES(200);
|
||||||
|
INSERT INTO t1 VALUES(202);
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t1 VALUES(201);
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=DEFAULT;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
136
storage/rocksdb/mysql-test/rocksdb/t/bulk_load_unsorted.test
Normal file
136
storage/rocksdb/mysql-test/rocksdb/t/bulk_load_unsorted.test
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
--let pk_cf=cf1
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
SET rocksdb_bulk_load_size=3;
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=1;
|
||||||
|
|
||||||
|
### Test individual INSERTs ###
|
||||||
|
|
||||||
|
# A table with only a PK won't have rows until the bulk load is finished
|
||||||
|
eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf");
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
--disable_query_log
|
||||||
|
let $sign = 1;
|
||||||
|
let $max = 5;
|
||||||
|
let $i = 1;
|
||||||
|
while ($i <= $max) {
|
||||||
|
let $a = 1 + $sign * $i;
|
||||||
|
let $b = 1 - $sign * $i;
|
||||||
|
let $sign = -$sign;
|
||||||
|
let $insert = INSERT INTO t1 VALUES ($a, $b);
|
||||||
|
eval $insert;
|
||||||
|
inc $i;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# A table with a PK and a SK shows rows immediately
|
||||||
|
eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf", KEY(b));
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
--disable_query_log
|
||||||
|
let $sign = 1;
|
||||||
|
let $max = 5;
|
||||||
|
let $i = 1;
|
||||||
|
while ($i <= $max) {
|
||||||
|
let $a = 1 + $sign * $i;
|
||||||
|
let $b = 1 - $sign * $i;
|
||||||
|
let $sign = -$sign;
|
||||||
|
let $insert = INSERT INTO t1 VALUES ($a, $b);
|
||||||
|
eval $insert;
|
||||||
|
inc $i;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Inserting into another table finishes bulk load to the previous table
|
||||||
|
eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf");
|
||||||
|
eval CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf");
|
||||||
|
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
INSERT INTO t1 VALUES (1,1);
|
||||||
|
INSERT INTO t2 VALUES (1,1);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
INSERT INTO t1 VALUES (2,2);
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SET rocksdb_bulk_load=0;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
### Test bulk load from a file ###
|
||||||
|
eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf");
|
||||||
|
eval CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "$pk_cf");
|
||||||
|
eval CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf")
|
||||||
|
PARTITION BY KEY() PARTITIONS 4;
|
||||||
|
|
||||||
|
--let $file = `SELECT CONCAT(@@datadir, "test_loadfile.txt")`
|
||||||
|
# Create a text file with data to import into the table.
|
||||||
|
# PK and SK are not in any order
|
||||||
|
--let ROCKSDB_INFILE = $file
|
||||||
|
perl;
|
||||||
|
my $fn = $ENV{'ROCKSDB_INFILE'};
|
||||||
|
open(my $fh, '>', $fn) || die "perl open($fn): $!";
|
||||||
|
my $max = 5000000;
|
||||||
|
my $sign = 1;
|
||||||
|
for (my $ii = 0; $ii < $max; $ii++)
|
||||||
|
{
|
||||||
|
my $a = 1 + $sign * $ii;
|
||||||
|
my $b = 1 - $sign * $ii;
|
||||||
|
print $fh "$a\t$b\n";
|
||||||
|
}
|
||||||
|
close($fh);
|
||||||
|
EOF
|
||||||
|
--file_exists $file
|
||||||
|
|
||||||
|
# Make sure a snapshot held by another user doesn't block the bulk load
|
||||||
|
connect (other,localhost,root,,);
|
||||||
|
set session transaction isolation level repeatable read;
|
||||||
|
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
|
||||||
|
start transaction with consistent snapshot;
|
||||||
|
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
set rocksdb_bulk_load=1;
|
||||||
|
set rocksdb_bulk_load_size=100000;
|
||||||
|
--disable_query_log
|
||||||
|
--echo LOAD DATA INFILE <input_file> INTO TABLE t1;
|
||||||
|
eval LOAD DATA INFILE '$file' INTO TABLE t1;
|
||||||
|
--echo LOAD DATA INFILE <input_file> INTO TABLE t2;
|
||||||
|
eval LOAD DATA INFILE '$file' INTO TABLE t2;
|
||||||
|
--echo LOAD DATA INFILE <input_file> INTO TABLE t3;
|
||||||
|
eval LOAD DATA INFILE '$file' INTO TABLE t3;
|
||||||
|
--enable_query_log
|
||||||
|
set rocksdb_bulk_load=0;
|
||||||
|
|
||||||
|
--remove_file $file
|
||||||
|
|
||||||
|
# Make sure row count index stats are correct
|
||||||
|
--replace_column 6 # 7 # 8 # 9 #
|
||||||
|
SHOW TABLE STATUS WHERE name LIKE 't%';
|
||||||
|
|
||||||
|
ANALYZE TABLE t1, t2, t3;
|
||||||
|
|
||||||
|
--replace_column 6 # 7 # 8 # 9 #
|
||||||
|
SHOW TABLE STATUS WHERE name LIKE 't%';
|
||||||
|
|
||||||
|
# Make sure all the data is there.
|
||||||
|
select count(a) from t1;
|
||||||
|
select count(b) from t1;
|
||||||
|
select count(a) from t2;
|
||||||
|
select count(b) from t2;
|
||||||
|
select count(a) from t3;
|
||||||
|
select count(b) from t3;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=0;
|
@@ -0,0 +1,8 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
--source include/have_nodebug.inc
|
||||||
|
|
||||||
|
# Cannot change unsorted input preference during bulk load
|
||||||
|
SET rocksdb_bulk_load=1;
|
||||||
|
--error ER_ERROR_WHEN_EXECUTING_COMMAND
|
||||||
|
SET rocksdb_bulk_load_allow_unsorted=1;
|
||||||
|
SET rocksdb_bulk_load=0;
|
22
storage/rocksdb/mysql-test/rocksdb/t/bytes_written.test
Normal file
22
storage/rocksdb/mysql-test/rocksdb/t/bytes_written.test
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS stats_test_table;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
# Create the table
|
||||||
|
CREATE TABLE stats_test_table (a INT, b INT, PRIMARY KEY (a)) ENGINE=ROCKSDB;
|
||||||
|
|
||||||
|
# Ensure appropriate perf_context_level is set
|
||||||
|
SET GLOBAL rocksdb_perf_context_level=3;
|
||||||
|
|
||||||
|
# Insert some values
|
||||||
|
INSERT INTO stats_test_table VALUES (7,1);
|
||||||
|
INSERT INTO stats_test_table VALUES (2,2);
|
||||||
|
|
||||||
|
# Verify the bytes written are updated in the table stats
|
||||||
|
SELECT io_write_bytes > 0 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_NAME = "stats_test_table";
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE stats_test_table;
|
||||||
|
SET GLOBAL rocksdb_perf_context_level=DEFAULT;
|
@@ -0,0 +1,79 @@
|
|||||||
|
# Disable until covered unpack_info format enabled in prod
|
||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_nodebug.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
#
|
||||||
|
# Normal case
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id INT,
|
||||||
|
fake_id INT,
|
||||||
|
bigfield VARCHAR(4096),
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
KEY bf (bigfield(32)),
|
||||||
|
KEY fid (fake_id, bigfield(32))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
|
||||||
|
(8, 1008, REPEAT('b', 8)),
|
||||||
|
(24, 1024, REPEAT('c', 24)),
|
||||||
|
(31, 1031, REPEAT('d', 31)),
|
||||||
|
(32, 1032, REPEAT('x', 32)),
|
||||||
|
(33, 1033, REPEAT('y', 33)),
|
||||||
|
(128, 1128, REPEAT('z', 128));
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Eligible for optimization, access via fake_id only
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 2
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Not eligible for optimization, access via fake_id of big row.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create same table with older format to test compatibility
|
||||||
|
#
|
||||||
|
|
||||||
|
set session debug= '+d,MYROCKS_NO_COVERED_BITMAP_FORMAT';
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id INT,
|
||||||
|
fake_id INT,
|
||||||
|
bigfield VARCHAR(4096),
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
KEY bf (bigfield(32)),
|
||||||
|
KEY fid (fake_id, bigfield(32))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
set session debug= '-d,MYROCKS_NO_COVERED_BITMAP_FORMAT';
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
|
||||||
|
(8, 1008, REPEAT('b', 8)),
|
||||||
|
(24, 1024, REPEAT('c', 24)),
|
||||||
|
(31, 1031, REPEAT('d', 31)),
|
||||||
|
(32, 1032, REPEAT('x', 32)),
|
||||||
|
(33, 1033, REPEAT('y', 33)),
|
||||||
|
(128, 1128, REPEAT('z', 128));
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= No longer eligible for optimization since no covered bitmap was stored.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Not eligible for optimization.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
18
storage/rocksdb/mysql-test/rocksdb/t/ddl_high_priority.test
Normal file
18
storage/rocksdb/mysql-test/rocksdb/t/ddl_high_priority.test
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Test high priority DDL
|
||||||
|
# There are two modes of high priority DDL:
|
||||||
|
# 1. Through the system variable high_priority_ddl
|
||||||
|
# 2. Through syntax: CREATE/ALTER/DROP/OPTIMIZE HIGH_PRIORITY ...
|
||||||
|
|
||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
--echo ##
|
||||||
|
--echo ## Using the system variable high_priority_ddl"
|
||||||
|
--echo ##
|
||||||
|
--let $use_sys_var = 1;
|
||||||
|
--source include/ddl_high_priority.inc
|
||||||
|
|
||||||
|
--echo ##
|
||||||
|
--echo ## Using HIGH_PRIORITY syntax
|
||||||
|
--echo ##
|
||||||
|
--let $use_sys_var = 0;
|
||||||
|
--source include/ddl_high_priority.inc
|
153
storage/rocksdb/mysql-test/rocksdb/t/deadlock_tracking.test
Normal file
153
storage/rocksdb/mysql-test/rocksdb/t/deadlock_tracking.test
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
set @prior_lock_wait_timeout = @@rocksdb_lock_wait_timeout;
|
||||||
|
set @prior_deadlock_detect = @@rocksdb_deadlock_detect;
|
||||||
|
set @prior_max_latest_deadlocks = @@rocksdb_max_latest_deadlocks;
|
||||||
|
set global rocksdb_deadlock_detect = on;
|
||||||
|
set global rocksdb_lock_wait_timeout = 10000;
|
||||||
|
--echo # Clears deadlock buffer of any prior deadlocks.
|
||||||
|
set global rocksdb_max_latest_deadlocks = 0;
|
||||||
|
set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks;
|
||||||
|
let $engine = rocksdb;
|
||||||
|
|
||||||
|
--source include/count_sessions.inc
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
let $con1= `SELECT CONNECTION_ID()`;
|
||||||
|
|
||||||
|
connect (con2,localhost,root,,);
|
||||||
|
let $con2= `SELECT CONNECTION_ID()`;
|
||||||
|
|
||||||
|
connect (con3,localhost,root,,);
|
||||||
|
let $con3= `SELECT CONNECTION_ID()`;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
eval create table t (i int primary key) engine=$engine;
|
||||||
|
insert into t values (1), (2), (3);
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
|
||||||
|
echo Deadlock #1;
|
||||||
|
--source include/simple_deadlock.inc
|
||||||
|
connection default;
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
|
||||||
|
echo Deadlock #2;
|
||||||
|
--source include/simple_deadlock.inc
|
||||||
|
connection default;
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
set global rocksdb_max_latest_deadlocks = 10;
|
||||||
|
|
||||||
|
echo Deadlock #3;
|
||||||
|
--source include/simple_deadlock.inc
|
||||||
|
connection default;
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
set global rocksdb_max_latest_deadlocks = 1;
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
|
||||||
|
connection con3;
|
||||||
|
set rocksdb_deadlock_detect_depth = 2;
|
||||||
|
|
||||||
|
echo Deadlock #4;
|
||||||
|
connection con1;
|
||||||
|
begin;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
begin;
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
|
||||||
|
connection con3;
|
||||||
|
begin;
|
||||||
|
select * from t where i=3 for update;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
send select * from t where i=2 for update;
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
let $wait_condition = select count(*) = 1 from information_schema.rocksdb_trx
|
||||||
|
where thread_id = $con1 and waiting_key != "";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
send select * from t where i=3 for update;
|
||||||
|
|
||||||
|
connection con3;
|
||||||
|
let $wait_condition = select count(*) = 1 from information_schema.rocksdb_trx
|
||||||
|
where thread_id = $con2 and waiting_key != "";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--error ER_LOCK_DEADLOCK
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
reap;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
reap;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
set global rocksdb_max_latest_deadlocks = 5;
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
|
||||||
|
echo Deadlock #5;
|
||||||
|
connection con1;
|
||||||
|
begin;
|
||||||
|
select * from t where i=1 for update;
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
begin;
|
||||||
|
select * from t where i=2 for update;
|
||||||
|
|
||||||
|
connection con3;
|
||||||
|
begin;
|
||||||
|
select * from t where i=3 lock in share mode;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
select * from t where i=100 for update;
|
||||||
|
select * from t where i=101 for update;
|
||||||
|
send select * from t where i=2 for update;
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
let $wait_condition = select count(*) = 1 from information_schema.rocksdb_trx
|
||||||
|
where thread_id = $con1 and waiting_key != "";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
select * from t where i=3 lock in share mode;
|
||||||
|
select * from t where i=200 for update;
|
||||||
|
select * from t where i=201 for update;
|
||||||
|
|
||||||
|
--error ER_LOCK_DEADLOCK
|
||||||
|
select * from t where i=1 lock in share mode;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
reap;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection con3;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
|
||||||
|
disconnect con1;
|
||||||
|
disconnect con2;
|
||||||
|
disconnect con3;
|
||||||
|
|
||||||
|
set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout;
|
||||||
|
set global rocksdb_deadlock_detect = @prior_deadlock_detect;
|
||||||
|
drop table t;
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/ /INDEX_ID: [0-9a-f]*/IDX_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
set global rocksdb_max_latest_deadlocks = 0;
|
||||||
|
--echo # Clears deadlock buffer of any existent deadlocks.
|
||||||
|
set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks;
|
||||||
|
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/ /INDEX_ID: [0-9a-f]*/IDX_ID/
|
||||||
|
show engine rocksdb transaction status;
|
||||||
|
--source include/wait_until_count_sessions.inc
|
@@ -1,4 +1,3 @@
|
|||||||
--rocksdb_max_subcompactions=1
|
--rocksdb_max_subcompactions=1
|
||||||
--rocksdb_info_log_level=info_level
|
|
||||||
--rocksdb_default_cf_options=write_buffer_size=512k;target_file_size_base=512k;level0_file_num_compaction_trigger=2;level0_slowdown_writes_trigger=-1;level0_stop_writes_trigger=1000;max_bytes_for_level_base=1m
|
--rocksdb_default_cf_options=write_buffer_size=512k;target_file_size_base=512k;level0_file_num_compaction_trigger=2;level0_slowdown_writes_trigger=-1;level0_stop_writes_trigger=1000;max_bytes_for_level_base=1m
|
||||||
|
|
||||||
|
@@ -8,12 +8,15 @@ DROP TABLE IF EXISTS t4;
|
|||||||
DROP TABLE IF EXISTS t5;
|
DROP TABLE IF EXISTS t5;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
call mtr.add_suppression("Column family 'cf1' not found");
|
||||||
|
call mtr.add_suppression("Column family 'rev:cf2' not found");
|
||||||
|
call mtr.add_suppression("LibRocksDB");
|
||||||
|
|
||||||
# Start from clean slate
|
# Start from clean slate
|
||||||
set global rocksdb_compact_cf = 'cf1';
|
set global rocksdb_compact_cf = 'cf1';
|
||||||
set global rocksdb_compact_cf = 'rev:cf2';
|
set global rocksdb_compact_cf = 'rev:cf2';
|
||||||
set global rocksdb_signal_drop_index_thread = 1;
|
set global rocksdb_signal_drop_index_thread = 1;
|
||||||
--source include/restart_mysqld.inc
|
--source include/restart_mysqld.inc
|
||||||
--exec truncate --size=0 $MYSQLTEST_VARDIR/log/mysqld.1.err
|
|
||||||
|
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a int not null,
|
a int not null,
|
||||||
|
@@ -8,12 +8,14 @@ DROP TABLE IF EXISTS t4;
|
|||||||
DROP TABLE IF EXISTS t5;
|
DROP TABLE IF EXISTS t5;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
call mtr.add_suppression("Column family 'cf1' not found");
|
||||||
|
call mtr.add_suppression("Column family 'rev:cf2' not found");
|
||||||
|
|
||||||
# Start from clean slate
|
# Start from clean slate
|
||||||
set global rocksdb_compact_cf = 'cf1';
|
set global rocksdb_compact_cf = 'cf1';
|
||||||
set global rocksdb_compact_cf = 'rev:cf2';
|
set global rocksdb_compact_cf = 'rev:cf2';
|
||||||
set global rocksdb_signal_drop_index_thread = 1;
|
set global rocksdb_signal_drop_index_thread = 1;
|
||||||
--source include/restart_mysqld.inc
|
--source include/restart_mysqld.inc
|
||||||
--exec truncate --size=0 $MYSQLTEST_VARDIR/log/mysqld.1.err
|
|
||||||
|
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a int not null,
|
a int not null,
|
||||||
|
@@ -4,12 +4,14 @@
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
call mtr.add_suppression("Column family 'cf1' not found");
|
||||||
|
call mtr.add_suppression("Column family 'rev:cf2' not found");
|
||||||
|
|
||||||
# Start from clean slate
|
# Start from clean slate
|
||||||
set global rocksdb_compact_cf = 'cf1';
|
set global rocksdb_compact_cf = 'cf1';
|
||||||
set global rocksdb_compact_cf = 'rev:cf2';
|
set global rocksdb_compact_cf = 'rev:cf2';
|
||||||
set global rocksdb_signal_drop_index_thread = 1;
|
set global rocksdb_signal_drop_index_thread = 1;
|
||||||
--source include/restart_mysqld.inc
|
--source include/restart_mysqld.inc
|
||||||
--exec truncate --size=0 $MYSQLTEST_VARDIR/log/mysqld.1.err
|
|
||||||
|
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a int not null,
|
a int not null,
|
||||||
|
@@ -22,17 +22,21 @@ CREATE TABLE t2 (id1 INT, id2 INT, id3 INT,
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
|
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
CREATE TABLE t1 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
|
CREATE TABLE t1 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
|
||||||
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
|
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
|
||||||
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
|
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
|
||||||
PRIMARY KEY (id1, id2, id3),
|
PRIMARY KEY (id1, id2, id3),
|
||||||
UNIQUE KEY (id3, id1)) ENGINE=ROCKSDB;
|
UNIQUE KEY (id3, id1)) ENGINE=ROCKSDB;
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
|
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
CREATE TABLE t2 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
|
CREATE TABLE t2 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
|
||||||
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
|
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
|
||||||
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
|
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
|
||||||
PRIMARY KEY (id1, id2, id3),
|
PRIMARY KEY (id1, id2, id3),
|
||||||
UNIQUE KEY (id3, id1) COMMENT 'rev:cf') ENGINE=ROCKSDB;
|
UNIQUE KEY (id3, id1) COMMENT 'rev:cf') ENGINE=ROCKSDB;
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
|
|
||||||
--source suite/rocksdb/include/dup_key_update.inc
|
--source suite/rocksdb/include/dup_key_update.inc
|
||||||
|
|
||||||
|
@@ -0,0 +1,120 @@
|
|||||||
|
# Disable until covered unpack_info format enabled in prod
|
||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_nodebug.inc
|
||||||
|
|
||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id INT,
|
||||||
|
fake_id INT,
|
||||||
|
bigfield VARCHAR(4096),
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
KEY bf (bigfield(32)),
|
||||||
|
KEY fid (fake_id, bigfield(32))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
|
||||||
|
(8, 1008, REPEAT('b', 8)),
|
||||||
|
(24, 1024, REPEAT('c', 24)),
|
||||||
|
(31, 1031, REPEAT('d', 31)),
|
||||||
|
(32, 1032, REPEAT('x', 32)),
|
||||||
|
(33, 1033, REPEAT('y', 33)),
|
||||||
|
(128, 1128, REPEAT('z', 128));
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Baseline sanity check
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT "no-op query"
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Eligible for optimization.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 2
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('d', 31)
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Eligible for optimization, access via fake_id only
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 2
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Not eligible for optimization, access via fake_id of big row.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
# The secondary_index_read call isn't covered because the next record in the
|
||||||
|
# index has a bigfield value of length 33, so only one of two lookups are
|
||||||
|
# covered here.
|
||||||
|
--let $prefix_index_check_title= Eligible for optimization.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 1
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('x', 32)
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Not eligible for optimization.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('y', 33)
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Eligible for optimization.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 2
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('b', 8)
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Eligible for optimization.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 2
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('c', 24)
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Not eligible for optimization.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('z', 128)
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Test that multi-byte charsets are handled correctly
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES utf8;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT PRIMARY KEY,
|
||||||
|
b VARCHAR(30) CHARACTER SET utf8 collate utf8_bin,
|
||||||
|
KEY k (b(2))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1, 'a'),
|
||||||
|
(2, 'cc'),
|
||||||
|
(3, 'ŽŽ'),
|
||||||
|
(4, 'žžžž');
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Charset record obviously shorter than the prefix
|
||||||
|
--let $prefix_index_check_query= SELECT * FROM t1 FORCE INDEX(k) WHERE b = "a"
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 2
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Charset record shorter than prefix
|
||||||
|
--let $prefix_index_check_query= SELECT * FROM t1 FORCE INDEX(k) WHERE b = "cc"
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 2
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Charset record with glyphs shorter than prefix
|
||||||
|
--let $prefix_index_check_query= SELECT * FROM t1 FORCE INDEX(k) WHERE b = "ŽŽ"
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 1
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Charset record longer than prefix
|
||||||
|
--let $prefix_index_check_query= SELECT * FROM t1 FORCE INDEX(k) WHERE b = "žžžž"
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
@@ -119,3 +119,37 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
--enable_parsing
|
--enable_parsing
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test index prefix length limits.
|
||||||
|
#
|
||||||
|
set global rocksdb_large_prefix=0;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
KEY (a(767))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Should display warning
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
KEY (a(768))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
KEY (a(3072))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Should display warning
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
KEY (a(3073))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
|
@@ -62,3 +62,35 @@ ALTER TABLE t1 ADD CONSTRAINT PRIMARY KEY pk (a);
|
|||||||
SHOW KEYS IN t1;
|
SHOW KEYS IN t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test index prefix length limits.
|
||||||
|
#
|
||||||
|
set global rocksdb_large_prefix=0;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
PRIMARY KEY (a(767))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--error ER_TOO_LONG_KEY
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(1024),
|
||||||
|
PRIMARY KEY (a(768))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
PRIMARY KEY (a(3072))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--error ER_TOO_LONG_KEY
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BLOB(4096),
|
||||||
|
PRIMARY KEY (a(3073))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
|
||||||
|
set global rocksdb_large_prefix=DEFAULT;
|
||||||
|
@@ -0,0 +1,49 @@
|
|||||||
|
# Disable until covered unpack_info format enabled in prod
|
||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_nodebug.inc
|
||||||
|
|
||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS T1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE TABLE T1 (
|
||||||
|
P1 VARCHAR(64), P2 VARCHAR(64), P3 VARCHAR(64), P4 VARCHAR(64),
|
||||||
|
S1 VARCHAR(64), S2 VARCHAR(64), S3 VARCHAR(64), S4 VARCHAR(64),
|
||||||
|
S5 VARCHAR(64), S6 VARCHAR(64), S7 VARCHAR(64), S8 VARCHAR(64),
|
||||||
|
S9 VARCHAR(64), S10 VARCHAR(64), S11 VARCHAR(64), S12 VARCHAR(64),
|
||||||
|
S13 VARCHAR(64), S14 VARCHAR(64), S15 VARCHAR(64), S16 VARCHAR(64),
|
||||||
|
PRIMARY KEY (P1(8), P2(8), P3(8), P4(8)),
|
||||||
|
KEY SK (S1(8), S2(8), S3(8), S4(8),
|
||||||
|
S5(8), S6(8), S7(8), S8(8),
|
||||||
|
S9(8), S10(8), S11(8), S12(8),
|
||||||
|
S13(8), S14(8), S15(8), S16(8))
|
||||||
|
) ENGINE=rocksdb;
|
||||||
|
|
||||||
|
INSERT INTO T1 VALUES ('1', '2', '3', '4',
|
||||||
|
'5', '6', '7', '8',
|
||||||
|
'9', '10', '11', '12',
|
||||||
|
'13', '14', '15', '16',
|
||||||
|
'17', '18', '19', '20');
|
||||||
|
|
||||||
|
SELECT * FROM T1;
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Not eligible for optimization, shorter than prefix length.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT P4, S2 FROM T1 FORCE INDEX(SK) WHERE S1='5'
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
DELETE FROM T1;
|
||||||
|
INSERT INTO T1 VALUES ('100000000', '200000000', '300000000', '400000000',
|
||||||
|
'500000000', '600000000', '700000000', '800000000',
|
||||||
|
'900000000', '100000000', '110000000', '120000000',
|
||||||
|
'130000000', '140000000', '150000000', '160000000',
|
||||||
|
'170000000', '180000000', '190000000', '200000000');
|
||||||
|
|
||||||
|
--let $prefix_index_check_title= Not eligible for optimization, longer than prefix length.
|
||||||
|
--let $prefix_index_check_read_avoided_delta= 0
|
||||||
|
--let $prefix_index_check_query= SELECT P4, S2 FROM T1 FORCE INDEX(SK) WHERE S1='5'
|
||||||
|
--source suite/rocksdb/include/prefix_index_only_query_check.inc
|
||||||
|
|
||||||
|
DROP TABLE T1;
|
@@ -1657,7 +1657,9 @@ SET @old_mode = @@sql_mode;
|
|||||||
SET sql_mode = 'strict_all_tables';
|
SET sql_mode = 'strict_all_tables';
|
||||||
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb;
|
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set global rocksdb_large_prefix=1;
|
||||||
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb;
|
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb;
|
||||||
|
set global rocksdb_large_prefix=0;
|
||||||
insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde');
|
insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde');
|
||||||
select * from t1;
|
select * from t1;
|
||||||
--replace_column 9 #
|
--replace_column 9 #
|
||||||
|
@@ -23,10 +23,8 @@ CREATE TABLE t3 (k INT, PRIMARY KEY (k) COMMENT 'cf_t1') ENGINE = ROCKSDB;
|
|||||||
CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB
|
CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB
|
||||||
PARTITION BY KEY(l) PARTITIONS 4;
|
PARTITION BY KEY(l) PARTITIONS 4;
|
||||||
|
|
||||||
SET GLOBAL rocksdb_force_flush_memtable_now=1;
|
SET @save.rocksdb_max_background_jobs= @@global.rocksdb_max_background_jobs;
|
||||||
|
SET GLOBAL rocksdb_max_background_jobs= 1;
|
||||||
--replace_column 2 # 3 #
|
|
||||||
SHOW ENGINE rocksdb STATUS;
|
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (1), (2), (3);
|
INSERT INTO t1 VALUES (1), (2), (3);
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
@@ -37,6 +35,11 @@ SELECT COUNT(*) FROM t2;
|
|||||||
INSERT INTO t4 VALUES (1), (2), (3), (4), (5);
|
INSERT INTO t4 VALUES (1), (2), (3), (4), (5);
|
||||||
SELECT COUNT(*) FROM t4;
|
SELECT COUNT(*) FROM t4;
|
||||||
|
|
||||||
|
SET GLOBAL rocksdb_force_flush_memtable_now=1;
|
||||||
|
SET GLOBAL rocksdb_compact_cf="cf_t1";
|
||||||
|
--replace_column 2 # 3 #
|
||||||
|
SHOW ENGINE rocksdb STATUS;
|
||||||
|
|
||||||
# Fetch data from information schema as well
|
# Fetch data from information schema as well
|
||||||
--replace_column 3 #
|
--replace_column 3 #
|
||||||
SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS;
|
SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS;
|
||||||
@@ -80,3 +83,5 @@ SHOW ENGINE rocksdb TRANSACTION STATUS;
|
|||||||
|
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
|
|
||||||
|
# Restore old values
|
||||||
|
SET GLOBAL rocksdb_max_background_jobs= @save.rocksdb_max_background_jobs;
|
||||||
|
@@ -0,0 +1,39 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
--source include/have_debug.inc
|
||||||
|
|
||||||
|
# Write file to make mysql-test-run.pl expect the "crash", but don't restart the
|
||||||
|
# server until it is told to
|
||||||
|
--let $_server_id= `SELECT @@server_id`
|
||||||
|
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect
|
||||||
|
|
||||||
|
CREATE TABLE t1 (pk int primary key) ENGINE=ROCKSDB;
|
||||||
|
|
||||||
|
# Create a .frm file without a matching table
|
||||||
|
--exec cp $MYSQLTEST_VARDIR/mysqld.$_server_id/data/test/t1.frm $MYSQLTEST_VARDIR/mysqld.$_server_id/data/test/t1#sql-test.frm
|
||||||
|
|
||||||
|
# Restart the server with a .frm file exist but that table is not registered in RocksDB
|
||||||
|
--exec echo "wait" >$_expect_file_name
|
||||||
|
shutdown_server 10;
|
||||||
|
--exec echo "restart" >$_expect_file_name
|
||||||
|
--sleep 5
|
||||||
|
--enable_reconnect
|
||||||
|
--source include/wait_until_connected_again.inc
|
||||||
|
--disable_reconnect
|
||||||
|
|
||||||
|
# This will append '#sql-test' to the end of new name
|
||||||
|
set session debug="+d,gen_sql_table_name";
|
||||||
|
rename table t1 to t2;
|
||||||
|
set session debug= "-d,gen_sql_table_name";
|
||||||
|
|
||||||
|
# Remove the corresponding .frm files
|
||||||
|
--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.$_server_id/data/test *t1*.frm
|
||||||
|
--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.$_server_id/data/test *t2*.frm
|
||||||
|
|
||||||
|
# Restart the server with a table registered in RocksDB but does not have a .frm file
|
||||||
|
--exec echo "wait" >$_expect_file_name
|
||||||
|
shutdown_server 10;
|
||||||
|
--exec echo "restart" >$_expect_file_name
|
||||||
|
--sleep 5
|
||||||
|
--enable_reconnect
|
||||||
|
--source include/wait_until_connected_again.inc
|
||||||
|
--disable_reconnect
|
@@ -279,7 +279,7 @@ SELECT a FROM t1;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# TTL field with nullable ttl column (should fail)
|
# TTL field with nullable ttl column (should fail)
|
||||||
--error 1948
|
--error ER_RDB_TTL_COL_FORMAT
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a bigint(20) UNSIGNED NOT NULL,
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
b int NOT NULL,
|
b int NOT NULL,
|
||||||
@@ -290,7 +290,7 @@ CREATE TABLE t1 (
|
|||||||
COMMENT='ttl_duration=1;ttl_col=ts;';
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
# TTL field with non 8-bit integer column (should fail)
|
# TTL field with non 8-bit integer column (should fail)
|
||||||
--error 1948
|
--error ER_RDB_TTL_COL_FORMAT
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a bigint(20) UNSIGNED NOT NULL,
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
b int NOT NULL,
|
b int NOT NULL,
|
||||||
@@ -301,7 +301,7 @@ CREATE TABLE t1 (
|
|||||||
COMMENT='ttl_duration=1;ttl_col=ts;';
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
# TTL duration as some random garbage value
|
# TTL duration as some random garbage value
|
||||||
--error 1949
|
--error ER_RDB_TTL_DURATION_FORMAT
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a bigint(20) UNSIGNED NOT NULL,
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
b int NOT NULL,
|
b int NOT NULL,
|
||||||
@@ -311,7 +311,7 @@ CREATE TABLE t1 (
|
|||||||
COMMENT='ttl_duration=abc;';
|
COMMENT='ttl_duration=abc;';
|
||||||
|
|
||||||
# TTL col is some column outside of the table
|
# TTL col is some column outside of the table
|
||||||
--error 1948
|
--error ER_RDB_TTL_COL_FORMAT
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a bigint(20) UNSIGNED NOT NULL,
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
b int NOT NULL,
|
b int NOT NULL,
|
||||||
@@ -321,7 +321,7 @@ CREATE TABLE t1 (
|
|||||||
COMMENT='ttl_duration=1;ttl_col=abc;';
|
COMMENT='ttl_duration=1;ttl_col=abc;';
|
||||||
|
|
||||||
# TTL col must have accompanying duration
|
# TTL col must have accompanying duration
|
||||||
--error 1948
|
--error ER_RDB_TTL_COL_FORMAT
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a bigint(20) UNSIGNED NOT NULL,
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
b int NOT NULL,
|
b int NOT NULL,
|
||||||
@@ -372,10 +372,8 @@ CREATE TABLE t1 (
|
|||||||
) ENGINE=rocksdb
|
) ENGINE=rocksdb
|
||||||
COMMENT='ttl_duration=100;';
|
COMMENT='ttl_duration=100;';
|
||||||
|
|
||||||
--error 1947
|
--error ER_RDB_TTL_UNSUPPORTED
|
||||||
ALTER TABLE t1 DROP PRIMARY KEY;
|
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||||
--error 1947
|
|
||||||
ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE;
|
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
--rocksdb_enable_ttl_read_filtering=0
|
||||||
|
--rocksdb_default_cf_options=disable_auto_compactions=true
|
780
storage/rocksdb/mysql-test/rocksdb/t/ttl_secondary.test
Normal file
780
storage/rocksdb/mysql-test/rocksdb/t/ttl_secondary.test
Normal file
@@ -0,0 +1,780 @@
|
|||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
# Basic TTL test, pk ignored, no sk
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# no rows should be filtered
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Basic TTL test
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`),
|
||||||
|
KEY kb (`b`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# column before TTL in value
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 3, UNIX_TIMESTAMP(), 5);
|
||||||
|
INSERT INTO t1 values (2, 4, UNIX_TIMESTAMP(), 6);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# multi-part PK w/ TTL
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 3, 5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (2, 4, 6, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# nullable column(s) before TTL
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int,
|
||||||
|
c int,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kbc (b, c)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, NULL, NULL, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (2, NULL, NULL, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# variable len columns + null column(s) before TTL
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64),
|
||||||
|
`c` varbinary(256),
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`a`),
|
||||||
|
KEY kbc (`b`, `c`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', NULL, 'bc', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'efghijk', NULL, UNIX_TIMESTAMP(), 'l');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# TTL implicitly generated (no ttl column)
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 3, 5);
|
||||||
|
INSERT INTO t1 values (2, 4, 6);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# TTL field as the PK
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a, ts),
|
||||||
|
KEY kt (ts)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;ttl_col=ts;';
|
||||||
|
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (2, UNIX_TIMESTAMP());
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = -10;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
# should all still be there..
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 10;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# TTL field inside multi-part pk
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a, ts),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 3, UNIX_TIMESTAMP(), 5);
|
||||||
|
INSERT INTO t1 values (2, 4, UNIX_TIMESTAMP(), 6);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# TTL field inside key with variable length things..
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64),
|
||||||
|
`c` varbinary(256),
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`a`, `ts`),
|
||||||
|
KEY kb (`b`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', NULL, 'bc', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('de', 'fghijk', NULL, UNIX_TIMESTAMP(), 'l');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# TTL test where you compact (values still exist), real_sleep, then compact again,
|
||||||
|
# values should now be gone.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT NOT NULL,
|
||||||
|
b varbinary(64) NOT NULL,
|
||||||
|
c varbinary(256) NOT NULL,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
value mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (b,a,c),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=10;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values (2, 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
INSERT INTO t1 values (3, 'i', 'j', UNIX_TIMESTAMP(), 'k');
|
||||||
|
INSERT INTO t1 values (4, 'm', 'n', UNIX_TIMESTAMP(), 'o');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
# Nothing should get removed here.
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = -3600;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
# 1 and 2 should get removed here.
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
# 3 and 4 should get removed here.
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# TTL field with nullable ttl column (should fail)
|
||||||
|
--error ER_RDB_TTL_COL_FORMAT
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
ts bigint(20),
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
# TTL field with non 8-bit integer column (should fail)
|
||||||
|
--error ER_RDB_TTL_COL_FORMAT
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
ts int,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
# TTL duration as some random garbage value
|
||||||
|
--error ER_RDB_TTL_DURATION_FORMAT
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=abc;';
|
||||||
|
|
||||||
|
# TTL col is some column outside of the table
|
||||||
|
--error ER_RDB_TTL_COL_FORMAT
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=abc;';
|
||||||
|
|
||||||
|
# TTL col must have accompanying duration
|
||||||
|
--error ER_RDB_TTL_COL_FORMAT
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a,c),
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_col=abc;';
|
||||||
|
|
||||||
|
# Make sure it doesn't filter out things early
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=500;';
|
||||||
|
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Testing altering table comment with updated TTL duration
|
||||||
|
# This should trigger a rebuild of the table
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT PRIMARY KEY,
|
||||||
|
b INT NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=100;';
|
||||||
|
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
ALTER TABLE t1 COMMENT = 'ttl_duration=1';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Tables with hidden PK disabled
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT PRIMARY KEY,
|
||||||
|
b INT,
|
||||||
|
KEY (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=100;';
|
||||||
|
|
||||||
|
--error ER_RDB_TTL_UNSUPPORTED
|
||||||
|
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Test replacing PK, ttl should still work after
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT PRIMARY KEY,
|
||||||
|
b INT,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;';
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1,1);
|
||||||
|
INSERT INTO t1 VALUES (2,2);
|
||||||
|
|
||||||
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(b);
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = -3600;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Make sure table comment filled with other text before/after will work
|
||||||
|
# (basically, it needs semicolon before and after)
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) UNSIGNED NOT NULL,
|
||||||
|
b int,
|
||||||
|
PRIMARY KEY (a,b),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='asdadfasdfsadfadf ;ttl_duration=1; asfasdfasdfadfa';
|
||||||
|
INSERT INTO t1 values (UNIX_TIMESTAMP(), 1);
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
ALTER TABLE t1 COMMENT = 'adsf;;ttl_duration=5;asfasdfa;ttl_col=a;asdfasdf;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
INSERT INTO t1 values (UNIX_TIMESTAMP(), 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
|
||||||
|
# nothing removed here
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
# all removed here
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Test to make sure that TTL retains original timestamp during update
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, 0);
|
||||||
|
INSERT INTO t1 values (3, 0);
|
||||||
|
INSERT INTO t1 values (5, 0);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
INSERT INTO t1 values (7, 0);
|
||||||
|
INSERT INTO t1 values (9, 0);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
UPDATE t1 SET a=a+1;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# 1,3,5 should be dropped
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# test behaviour on update with TTL column, TTL time can be updated here.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;ttl_col=b;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# 5 and 7 should be gone here
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Test rows expired stat variable and disable ttl variable
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (2, 1);
|
||||||
|
INSERT INTO t1 values (3, 1);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
set global rocksdb_enable_ttl=0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
set global rocksdb_enable_ttl=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Table with TTL won't increment rows expired when no records have been
|
||||||
|
# compacted
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a bigint(20) NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=100;';
|
||||||
|
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
|
||||||
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Test update on TTL column in pk
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a, b),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;ttl_col=b;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk=0;
|
||||||
|
|
||||||
|
# 5 and 7 should be gone here
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# test behaviour on update with TTL column, TTL time can be updated here.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a, b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;ttl_col=b;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1;
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
# 7 should be gone here
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Add index inplace
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# nothing filtered out
|
||||||
|
SELECT COUNT(*);
|
||||||
|
|
||||||
|
CREATE INDEX kb on t1 (b);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Add index inplace, implicit TTL
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# nothing filtered out
|
||||||
|
SELECT COUNT(*);
|
||||||
|
|
||||||
|
CREATE INDEX kb on t1 (b);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Add index inplace, TTL column in PK
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`a` binary(8) NOT NULL,
|
||||||
|
`b` varbinary(64) NOT NULL,
|
||||||
|
`c` varbinary(256) NOT NULL,
|
||||||
|
`ts` bigint(20) UNSIGNED NOT NULL,
|
||||||
|
`value` mediumblob NOT NULL,
|
||||||
|
PRIMARY KEY (`b`,`a`,`c`, `ts`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
|
||||||
|
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SELECT COUNT(*);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# nothing filtered out
|
||||||
|
SELECT COUNT(*);
|
||||||
|
|
||||||
|
CREATE INDEX kb on t1 (b);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
# should have filtered the rows out since ttl is passed in compaction filter
|
||||||
|
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
|
||||||
|
DROP TABLE t1;
|
@@ -0,0 +1 @@
|
|||||||
|
--rocksdb_default_cf_options=disable_auto_compactions=true
|
@@ -0,0 +1,500 @@
|
|||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
# The purpose of read filtering for tables with TTL is to ensure that during a
|
||||||
|
# transaction a key which has expired already but not removed by compaction
|
||||||
|
# yet, is not returned to the user.
|
||||||
|
#
|
||||||
|
# Without this the user might be hit with problems such as disappearing rows
|
||||||
|
# within a transaction, etc, because the compaction filter ignores snapshots
|
||||||
|
# when filtering keys.
|
||||||
|
|
||||||
|
# Basic read filtering test
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b int NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Test that some rows are hidden but others aren't...
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b BIGINT UNSIGNED NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=10;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 300;
|
||||||
|
INSERT INTO t1 values (2, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
|
||||||
|
--echo # 1 should be hidden
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
|
||||||
|
--echo # none should be hidden yet, compaction runs but records aren't expired
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
--echo # all should be hidden now, even though compaction hasn't run again
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = -310;
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb);
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = 0;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Test the filtering code explicitly.
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b int NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
INSERT INTO t1 values (5, 5);
|
||||||
|
INSERT INTO t1 values (7, 7);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--echo # should return nothing.
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
# disable filtering
|
||||||
|
set global rocksdb_enable_ttl_read_filtering=0;
|
||||||
|
|
||||||
|
--echo # should return everything
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
# enable filtering
|
||||||
|
set global rocksdb_enable_ttl_read_filtering=1;
|
||||||
|
|
||||||
|
--echo # should return nothing.
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Read filtering index scan tests (None of these queries should return any results)
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
c int,
|
||||||
|
PRIMARY KEY (a,b,c),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (0,0,0);
|
||||||
|
INSERT INTO t1 values (0,0,1);
|
||||||
|
INSERT INTO t1 values (0,1,0);
|
||||||
|
INSERT INTO t1 values (0,1,1);
|
||||||
|
INSERT INTO t1 values (1,1,2);
|
||||||
|
INSERT INTO t1 values (1,2,1);
|
||||||
|
INSERT INTO t1 values (1,2,2);
|
||||||
|
INSERT INTO t1 values (1,2,3);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
|
||||||
|
# HA_READ_KEY_EXACT, using full key
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a=1 AND b=2 AND c=2;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a=1 AND b=2 AND c=2;
|
||||||
|
|
||||||
|
# HA_READ_KEY_EXACT, not using full key
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a = 1;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a = 1;
|
||||||
|
|
||||||
|
# HA_READ_BEFORE_KEY, not using full key
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a < 3;
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a < 3;
|
||||||
|
|
||||||
|
# HA_READ_BEFORE_KEY, using full key
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a < 2 AND b = 1 AND c < 3;
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a < 2 AND b = 1 AND c < 3;
|
||||||
|
|
||||||
|
# HA_READ_KEY_OR_NEXT
|
||||||
|
SELECT min(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a >= 1;
|
||||||
|
SELECT min(a) FROM t1 FORCE INDEX (kb) WHERE a >= 1;
|
||||||
|
|
||||||
|
# HA_READ_AFTER_KEY, /* Find next rec. after key-record */
|
||||||
|
SELECT min(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a > 1;
|
||||||
|
SELECT min(a) FROM t1 FORCE INDEX (kb) WHERE a > 1;
|
||||||
|
|
||||||
|
# HA_READ_PREFIX_LAST, /* Last key with the same prefix */
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a=1 and b in (1) order by c desc;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a=1 and b in (1) order by c desc;
|
||||||
|
|
||||||
|
# HA_READ_PREFIX_LAST_OR_PREV, /* Last or prev key with the same prefix */
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a <=10;
|
||||||
|
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a <=10;
|
||||||
|
|
||||||
|
# need to test read_range_first()
|
||||||
|
# calls into read_range_next() and uses compare_keys() to see if its out of
|
||||||
|
# range
|
||||||
|
SELECT a FROM t1 FORCE INDEX (PRIMARY) WHERE a > 0 and a <= 2;
|
||||||
|
SELECT a FROM t1 FORCE INDEX (kb) WHERE a > 0 and a <= 2;
|
||||||
|
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Attempt to update expired value, should filter out
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--echo # No error is thrown here, under the hood index_next_with_direction is
|
||||||
|
--echo # filtering out the record from being seen in the first place.
|
||||||
|
UPDATE t1 set a = 1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Ensure no rows can disappear in the middle of long-running transactions
|
||||||
|
--echo # Also ensure repeatable-read works as expected
|
||||||
|
--source include/count_sessions.inc
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
connect (con2,localhost,root,,);
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b int NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=5;';
|
||||||
|
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
--echo # Creating Snapshot (start transaction)
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
# We need the below snippet in case establishing con1 took an arbitrary
|
||||||
|
# amount of time. See https://github.com/facebook/mysql-5.6/pull/617#discussion_r120525391.
|
||||||
|
--disable_query_log
|
||||||
|
--let $snapshot_size= `SELECT COUNT(*) FROM t1`
|
||||||
|
--let $i= 0
|
||||||
|
while ($snapshot_size != 1)
|
||||||
|
{
|
||||||
|
if ($i == 1000)
|
||||||
|
{
|
||||||
|
--die Your testing host is too slow for reasonable TTL testing
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
ROLLBACK;
|
||||||
|
INSERT INTO t1 values (1,1);
|
||||||
|
BEGIN;
|
||||||
|
--let $snapshot_size= `SELECT COUNT(*) FROM t1`
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--echo # Nothing filtered out here
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
--sleep 5
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb); # <= shouldn't be filtered out here
|
||||||
|
|
||||||
|
--echo # Switching to connection 2
|
||||||
|
connection con2;
|
||||||
|
--echo # compaction doesn't do anything since con1 snapshot is still open
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 1;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_debug_ttl_ignore_pk = 0;
|
||||||
|
--echo # read filtered out, because on a different connection, on
|
||||||
|
--echo # this connection the records have 'expired' already so they are filtered out
|
||||||
|
--echo # even though they have not yet been removed by compaction
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
--echo # Switching to connection 1
|
||||||
|
connection con1;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb); # <= shouldn't be filtered out here
|
||||||
|
|
||||||
|
UPDATE t1 set a = a + 1;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb); # <= shouldn't be filtered out here
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--sorted_result # <= filtered out here because time has passed.
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
disconnect con1;
|
||||||
|
disconnect con2;
|
||||||
|
|
||||||
|
#transaction 1, create a snapshot and select * => returns nothing.
|
||||||
|
#transaction 2, insert into table, flush
|
||||||
|
#transaction 1, select * => returns nothing, but the snapshot should prevent the compaction code from removing the rows, no matter what the ttl duration is.
|
||||||
|
#transaction 2, select * -> sees nothing, disable filter, select * -> sees everything, enable filter, select * -> sees nothing.
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
connect (con2,localhost,root,,);
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int PRIMARY KEY,
|
||||||
|
b int NOT NULL,
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
|
||||||
|
--echo # On Connection 1
|
||||||
|
connection con1;
|
||||||
|
--echo # Creating Snapshot (start transaction)
|
||||||
|
BEGIN;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
# Sleep 5 secs after creating snapshot, this ensures any records created after
|
||||||
|
# this can't be removed by compaction until this snapshot is released.
|
||||||
|
--sleep 5
|
||||||
|
|
||||||
|
--echo # On Connection 2
|
||||||
|
connection con2;
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -2;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
INSERT INTO t1 values (5, 5);
|
||||||
|
INSERT INTO t1 values (7, 7);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
--echo # On Connection 1
|
||||||
|
connection con1;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
--echo # On Connection 2
|
||||||
|
connection con2;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
set global rocksdb_enable_ttl_read_filtering=0;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
set global rocksdb_enable_ttl_read_filtering=1;
|
||||||
|
|
||||||
|
disconnect con2;
|
||||||
|
disconnect con1;
|
||||||
|
connection default;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Wait till we reached the initial number of concurrent sessions
|
||||||
|
--source include/wait_until_count_sessions.inc
|
||||||
|
|
||||||
|
# Test that index_next_with_direction skips records properly
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
ts bigint(20) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1;ttl_col=ts;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 100;
|
||||||
|
INSERT INTO t1 VALUES (1, 1, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (2, 2, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (3, 3, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (4, 4, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (5, 5, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (6, 6, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (7, 7, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (8, 8, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (9, 9, UNIX_TIMESTAMP());
|
||||||
|
INSERT INTO t1 VALUES (10, 10, UNIX_TIMESTAMP());
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
--echo # None are expired
|
||||||
|
SELECT a, b FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
UPDATE t1 SET ts=(UNIX_TIMESTAMP()+1) WHERE a IN (4, 7);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
--echo # 4 and 7 should be gone
|
||||||
|
SELECT a, b FROM t1 FORCE INDEX (kb);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Test range scans with various conditionals
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
name VARCHAR(25) NOT NULL,
|
||||||
|
PRIMARY KEY (c1, c2),
|
||||||
|
KEY kc2 (c2)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT='ttl_duration=1;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -1200;
|
||||||
|
INSERT INTO t1 values (1,1,'a');
|
||||||
|
INSERT INTO t1 values (2,2,'b');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 1200;
|
||||||
|
INSERT INTO t1 values (3,3,'c');
|
||||||
|
INSERT INTO t1 values (4,4,'d');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -1200;
|
||||||
|
INSERT INTO t1 values (5,5,'e');
|
||||||
|
INSERT INTO t1 values (6,6,'f');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 1200;
|
||||||
|
INSERT INTO t1 values (7,7,'g');
|
||||||
|
INSERT INTO t1 values (8,8,'h');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE c1 > 5;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2) WHERE c2 > 5;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE 3 < c1 AND c1 < 6;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2) WHERE 3 < c2 AND c2 < 6;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Test range scans with varying expirations
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b)
|
||||||
|
) ENGINE=rocksdb
|
||||||
|
COMMENT='ttl_duration=1800;';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
INSERT INTO t1 values (1,1);
|
||||||
|
INSERT INTO t1 values (2,2);
|
||||||
|
INSERT INTO t1 values (7,7);
|
||||||
|
INSERT INTO t1 values (10,10);
|
||||||
|
INSERT INTO t1 values (11,11);
|
||||||
|
INSERT INTO t1 values (12,12);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 450;
|
||||||
|
INSERT INTO t1 values (3,3);
|
||||||
|
INSERT INTO t1 values (4,4);
|
||||||
|
INSERT INTO t1 values (8,8);
|
||||||
|
INSERT INTO t1 values (16,16);
|
||||||
|
INSERT INTO t1 values (17,17);
|
||||||
|
INSERT INTO t1 values (18,18);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 900;
|
||||||
|
INSERT INTO t1 values (5,5);
|
||||||
|
INSERT INTO t1 values (6,6);
|
||||||
|
INSERT INTO t1 values (9,9);
|
||||||
|
INSERT INTO t1 values (13,13);
|
||||||
|
INSERT INTO t1 values (14,14);
|
||||||
|
INSERT INTO t1 values (15,15);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--echo # Should see everything
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--echo # Should have no records from the first group
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = -1800;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a > 5 AND a < 15;
|
||||||
|
|
||||||
|
--echo # Should only have records from the last group
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = -1800 - 450;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb) WHERE a < 10;
|
||||||
|
|
||||||
|
--echo # Should be empty
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = -1800 - 900;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_read_filter_ts = 0;
|
||||||
|
DROP TABLE t1;
|
@@ -0,0 +1,87 @@
|
|||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
# Multiple indexes, trigger compaction on sk and check consistency
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b) COMMENT 'kb',
|
||||||
|
KEY kc (c) COMMENT 'kc'
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT='ttl_duration=1';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2, 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 100;
|
||||||
|
INSERT INTO t1 values (3, 3, 3);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='kb';
|
||||||
|
|
||||||
|
# Results should be consistent
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Trigger compaction on pk and check consistency
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b) COMMENT 'kb',
|
||||||
|
KEY kc (c) COMMENT 'kc'
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT='ttl_duration=1';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2, 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 100;
|
||||||
|
INSERT INTO t1 values (3, 3, 3);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
# Results should be consistent
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Trigger compaction on pk and sk and check consistency
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int NOT NULL,
|
||||||
|
b int NOT NULL,
|
||||||
|
c int NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY kb (b) COMMENT 'kb',
|
||||||
|
KEY kc (c) COMMENT 'kc'
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT='ttl_duration=1';
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -100;
|
||||||
|
INSERT INTO t1 values (1, 1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2, 2);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 100;
|
||||||
|
INSERT INTO t1 values (3, 3, 3);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
set global rocksdb_compact_cf='kb';
|
||||||
|
|
||||||
|
# Results should be consistent
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kb);
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
@@ -0,0 +1 @@
|
|||||||
|
--rocksdb_enable_ttl_read_filtering=0
|
@@ -0,0 +1,300 @@
|
|||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_rocksdb.inc
|
||||||
|
--source include/have_partition.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create a table with multiple partitions, but in the comment don't specify
|
||||||
|
# that per-partition based column families (CF) should be created. Expect that
|
||||||
|
# default CF will be used and new one won't be created.
|
||||||
|
#
|
||||||
|
# In addition, specify TTL on one of the partitions. Insert a few things
|
||||||
|
# inside all the partitions, verify after compaction that the rows inside the
|
||||||
|
# partition with TTL has disappeared.
|
||||||
|
#
|
||||||
|
# Add secondary keys to all tables to test compatibility.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
PRIMARY KEY (`c1`),
|
||||||
|
KEY kc2 (`c2`)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="custom_p0_ttl_duration=1;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 4, 7),
|
||||||
|
PARTITION custom_p1 VALUES IN (2, 5, 8),
|
||||||
|
PARTITION custom_p2 VALUES IN (3, 6, 9)
|
||||||
|
);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -3600;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (2, 2);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
INSERT INTO t1 values (4, 4);
|
||||||
|
INSERT INTO t1 values (5, 5);
|
||||||
|
INSERT INTO t1 values (6, 6);
|
||||||
|
INSERT INTO t1 values (7, 7);
|
||||||
|
INSERT INTO t1 values (8, 8);
|
||||||
|
INSERT INTO t1 values (9, 9);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
# 1,4, and 7 should be gone
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create a table with multiple partitions and request for separate CF to be
|
||||||
|
# created per every partition. As a result we expect three different CF-s to be
|
||||||
|
# created.
|
||||||
|
#
|
||||||
|
# In addition, specify TTL on some of the partitions. Insert a few things
|
||||||
|
# inside all the partitions, verify after compaction that the rows inside the
|
||||||
|
# partition with TTL has disappeared.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
name VARCHAR(25) NOT NULL,
|
||||||
|
PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=my_custom_cf;custom_p2_cfname=baz',
|
||||||
|
KEY kc2 (`c2`)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="custom_p0_ttl_duration=1;custom_p1_ttl_duration=7;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 4, 7),
|
||||||
|
PARTITION custom_p1 VALUES IN (2, 5, 8),
|
||||||
|
PARTITION custom_p2 VALUES IN (3, 6, 9)
|
||||||
|
);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -1200;
|
||||||
|
INSERT INTO t1 values (1,1,'a');
|
||||||
|
INSERT INTO t1 values (4,4,'aaaa');
|
||||||
|
INSERT INTO t1 values (7,7,'aaaaaaa');
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 1200;
|
||||||
|
INSERT INTO t1 values (2,2,'aa');
|
||||||
|
INSERT INTO t1 values (3,3,'aaa');
|
||||||
|
INSERT INTO t1 values (5,5,'aaaaa');
|
||||||
|
INSERT INTO t1 values (6,6,'aaaaaa');
|
||||||
|
INSERT INTO t1 values (8,8,'aaaaaaaa');
|
||||||
|
INSERT INTO t1 values (9,9,'aaaaaaaaa');
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set @@global.rocksdb_compact_cf = 'foo';
|
||||||
|
set @@global.rocksdb_compact_cf = 'my_custom_cf';
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 3600;
|
||||||
|
set @@global.rocksdb_compact_cf = 'foo';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
# Now 2,5,8 should be removed (this verifies that TTL is only operating on the
|
||||||
|
# particular CF.
|
||||||
|
set @@global.rocksdb_compact_cf = 'my_custom_cf';
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create a table with CF-s/TTL per partition and verify that ALTER TABLE + DROP
|
||||||
|
# PRIMARY, ADD PRIMARY work for that scenario and data is persisted/filtered as
|
||||||
|
# expected.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
name VARCHAR(25) NOT NULL,
|
||||||
|
event DATE,
|
||||||
|
PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
|
||||||
|
KEY kc2 (c2)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 2, 3),
|
||||||
|
PARTITION custom_p1 VALUES IN (4, 5, 6),
|
||||||
|
PARTITION custom_p2 VALUES IN (7, 8, 9)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, 1, "one", null);
|
||||||
|
INSERT INTO t1 VALUES (2, 2, "two", null);
|
||||||
|
INSERT INTO t1 VALUES (3, 3, "three", null);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (4, 4, "four", null);
|
||||||
|
INSERT INTO t1 VALUES (5, 5, "five", null);
|
||||||
|
INSERT INTO t1 VALUES (6, 6, "six", null);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (7, 7, "seven", null);
|
||||||
|
INSERT INTO t1 VALUES (8, 8, "eight", null);
|
||||||
|
INSERT INTO t1 VALUES (9, 9, "nine", null);
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
# TTL should be reset after alter table
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 600;
|
||||||
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;';
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
|
# ...so nothing should be gone here
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 100;
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set @@global.rocksdb_compact_cf = 'baz';
|
||||||
|
# Filter out expired secondary keys too
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 1200;
|
||||||
|
set @@global.rocksdb_compact_cf = 'foo';
|
||||||
|
set @@global.rocksdb_compact_cf = 'baz';
|
||||||
|
# Filter out expired secondary keys too
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create a table with non-partitioned TTL duration, with partitioned TTL
|
||||||
|
# columns
|
||||||
|
#
|
||||||
|
# In this case the same TTL duration will be applied across different TTL
|
||||||
|
# columns in different partitions, except for in p2 where we override the ttl
|
||||||
|
# duration.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 BIGINT,
|
||||||
|
c2 BIGINT UNSIGNED NOT NULL,
|
||||||
|
name VARCHAR(25) NOT NULL,
|
||||||
|
event DATE,
|
||||||
|
PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
|
||||||
|
KEY kc2 (`c2`)
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="ttl_duration=1;custom_p1_ttl_duration=100;custom_p1_ttl_col=c2;custom_p2_ttl_duration=5000;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 2, 3),
|
||||||
|
PARTITION custom_p1 VALUES IN (4, 5, 6),
|
||||||
|
PARTITION custom_p2 VALUES IN (7, 8, 9)
|
||||||
|
);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -300;
|
||||||
|
INSERT INTO t1 VALUES (1, UNIX_TIMESTAMP(), "one", null);
|
||||||
|
INSERT INTO t1 VALUES (2, UNIX_TIMESTAMP(), "two", null);
|
||||||
|
INSERT INTO t1 VALUES (3, UNIX_TIMESTAMP(), "three", null);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (4, UNIX_TIMESTAMP(), "four", null);
|
||||||
|
INSERT INTO t1 VALUES (5, UNIX_TIMESTAMP(), "five", null);
|
||||||
|
INSERT INTO t1 VALUES (6, UNIX_TIMESTAMP(), "six", null);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (7, UNIX_TIMESTAMP(), "seven", null);
|
||||||
|
INSERT INTO t1 VALUES (8, UNIX_TIMESTAMP(), "eight", null);
|
||||||
|
INSERT INTO t1 VALUES (9, UNIX_TIMESTAMP(), "nine", null);
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set @@global.rocksdb_compact_cf = 'foo';
|
||||||
|
set @@global.rocksdb_compact_cf = 'baz';
|
||||||
|
set @@global.rocksdb_compact_cf = 'bar';
|
||||||
|
# Filter out expired secondary keys too
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
|
||||||
|
# here we expect only 1,2,3 to be gone, ttl implicit.
|
||||||
|
--sorted_result
|
||||||
|
SELECT c1 FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT c1 FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
# here we expect only 4,5,6 to be gone, ttl based on column c2.
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 600;
|
||||||
|
set @@global.rocksdb_compact_cf = 'bar';
|
||||||
|
# Filter out expired secondary keys too
|
||||||
|
set @@global.rocksdb_compact_cf = 'default';
|
||||||
|
set global rocksdb_debug_ttl_snapshot_ts = 0;
|
||||||
|
--sorted_result
|
||||||
|
SELECT c1 FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT c1 FROM t1 FORCE INDEX (kc2);
|
||||||
|
|
||||||
|
# at this point only 7,8,9 should be left..
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Add index inplace
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
c1 INT,
|
||||||
|
c2 INT,
|
||||||
|
PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;'
|
||||||
|
) ENGINE=ROCKSDB
|
||||||
|
COMMENT="custom_p0_ttl_duration=1;"
|
||||||
|
PARTITION BY LIST(c1) (
|
||||||
|
PARTITION custom_p0 VALUES IN (1, 4, 7),
|
||||||
|
PARTITION custom_p1 VALUES IN (2, 5, 8),
|
||||||
|
PARTITION custom_p2 VALUES IN (3, 6, 9)
|
||||||
|
);
|
||||||
|
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = -3600;
|
||||||
|
INSERT INTO t1 values (1, 1);
|
||||||
|
INSERT INTO t1 values (4, 4);
|
||||||
|
INSERT INTO t1 values (7, 7);
|
||||||
|
set global rocksdb_debug_ttl_rec_ts = 0;
|
||||||
|
INSERT INTO t1 values (2, 2);
|
||||||
|
INSERT INTO t1 values (3, 3);
|
||||||
|
INSERT INTO t1 values (5, 5);
|
||||||
|
INSERT INTO t1 values (6, 6);
|
||||||
|
INSERT INTO t1 values (8, 8);
|
||||||
|
INSERT INTO t1 values (9, 9);
|
||||||
|
|
||||||
|
# Nothing filtered out
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
CREATE INDEX kc2 on t1 (c2);
|
||||||
|
|
||||||
|
set global rocksdb_force_flush_memtable_now=1;
|
||||||
|
set global rocksdb_compact_cf='foo';
|
||||||
|
set global rocksdb_compact_cf='default';
|
||||||
|
|
||||||
|
# 1,4, and 7 should be gone
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (PRIMARY);
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 FORCE INDEX (kc2);
|
||||||
|
DROP TABLE t1;
|
@@ -6,8 +6,8 @@ SET GLOBAL rocksdb_write_ignore_missing_column_families=true;
|
|||||||
create table aaa (id int primary key, i int) engine rocksdb;
|
create table aaa (id int primary key, i int) engine rocksdb;
|
||||||
|
|
||||||
set @save_rocksdb_flush_log_at_trx_commit=@@global.rocksdb_flush_log_at_trx_commit;
|
set @save_rocksdb_flush_log_at_trx_commit=@@global.rocksdb_flush_log_at_trx_commit;
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
||||||
--exec sleep 30
|
--exec sleep 5
|
||||||
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
insert aaa(id, i) values(1,1);
|
insert aaa(id, i) values(1,1);
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
@@ -16,19 +16,22 @@ select variable_value-@a from information_schema.global_status where variable_na
|
|||||||
insert aaa(id, i) values(3,1);
|
insert aaa(id, i) values(3,1);
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
|
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
|
||||||
|
--exec sleep 5
|
||||||
|
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
insert aaa(id, i) values(4,1);
|
insert aaa(id, i) values(4,1);
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
|
||||||
insert aaa(id, i) values(5,1);
|
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
|
||||||
insert aaa(id, i) values(6,1);
|
|
||||||
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
|
||||||
|
|
||||||
SET GLOBAL rocksdb_flush_log_at_trx_commit=2;
|
|
||||||
insert aaa(id, i) values(7,1);
|
|
||||||
|
|
||||||
let $status_var=rocksdb_wal_synced;
|
let $status_var=rocksdb_wal_synced;
|
||||||
let $status_var_value=`select @a+4`;
|
let $status_var_value=`select @a+1`;
|
||||||
|
source include/wait_for_status_var.inc;
|
||||||
|
|
||||||
|
SET GLOBAL rocksdb_flush_log_at_trx_commit=2;
|
||||||
|
--exec sleep 5
|
||||||
|
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
|
||||||
|
insert aaa(id, i) values(5,1);
|
||||||
|
|
||||||
|
let $status_var=rocksdb_wal_synced;
|
||||||
|
let $status_var_value=`select @a+1`;
|
||||||
source include/wait_for_status_var.inc;
|
source include/wait_for_status_var.inc;
|
||||||
|
|
||||||
truncate table aaa;
|
truncate table aaa;
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
SET GLOBAL MAX_BINLOG_SIZE = 4096;
|
||||||
SET GLOBAL ROCKSDB_ENABLE_2PC = ON;
|
SET GLOBAL ROCKSDB_ENABLE_2PC = ON;
|
||||||
create table t1 (a int primary key, b int, c varchar(255)) engine=rocksdb;
|
create table t1 (a int primary key, b int, c varchar(255)) engine=rocksdb;
|
||||||
'con1'
|
'con1'
|
||||||
@@ -7,12 +8,10 @@ SET DEBUG_SYNC='rocksdb.prepared SIGNAL parked WAIT_FOR go';
|
|||||||
insert into t1 values (1, 1, "iamtheogthealphaandomega");;
|
insert into t1 values (1, 1, "iamtheogthealphaandomega");;
|
||||||
'con2'
|
'con2'
|
||||||
insert into t1 values (2, 1, "i_am_just_here_to_trigger_a_flush");
|
insert into t1 values (2, 1, "i_am_just_here_to_trigger_a_flush");
|
||||||
SET GLOBAL ROCKSDB_ENABLE_2PC = OFF;
|
SET GLOBAL ROCKSDB_FLUSH_LOG_AT_TRX_COMMIT = 0;
|
||||||
SET GLOBAL ROCKSDB_WRITE_SYNC = OFF;
|
|
||||||
SET GLOBAL SYNC_BINLOG = 0;
|
SET GLOBAL SYNC_BINLOG = 0;
|
||||||
SET DEBUG_SYNC='now WAIT_FOR parked';
|
SET DEBUG_SYNC='now WAIT_FOR parked';
|
||||||
SET GLOBAL ROCKSDB_ENABLE_2PC = ON;
|
SET GLOBAL ROCKSDB_FLUSH_LOG_AT_TRX_COMMIT = 2;
|
||||||
SET GLOBAL ROCKSDB_WRITE_SYNC = ON;
|
|
||||||
SET GLOBAL SYNC_BINLOG = 1;
|
SET GLOBAL SYNC_BINLOG = 1;
|
||||||
insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush");
|
insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush");
|
||||||
SET DEBUG_SYNC='now SIGNAL go';
|
SET DEBUG_SYNC='now SIGNAL go';
|
||||||
@@ -23,5 +22,5 @@ a b c
|
|||||||
1 1 iamtheogthealphaandomega
|
1 1 iamtheogthealphaandomega
|
||||||
select count(*) from t1;
|
select count(*) from t1;
|
||||||
count(*)
|
count(*)
|
||||||
1000000
|
4096
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@@ -0,0 +1,39 @@
|
|||||||
|
include/master-slave.inc
|
||||||
|
Warnings:
|
||||||
|
Note #### Sending passwords in plain text without SSL/TLS is extremely insecure.
|
||||||
|
Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
|
||||||
|
[connection master]
|
||||||
|
include/rpl_connect.inc [creating slave_block]
|
||||||
|
drop table if exists t1;
|
||||||
|
create table t1 (i int);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`i` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
insert into t1 values (1), (2), (3);
|
||||||
|
connection slave
|
||||||
|
select * from t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
connection slave_block
|
||||||
|
lock tables t1 read;
|
||||||
|
connection master;
|
||||||
|
create high_priority index idx1 on t1 (i);
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`i` int(11) DEFAULT NULL,
|
||||||
|
KEY `idx1` (`i`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
connection slave;
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`i` int(11) DEFAULT NULL,
|
||||||
|
KEY `idx1` (`i`)
|
||||||
|
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
|
||||||
|
drop table t1;
|
||||||
|
include/rpl_end.inc
|
@@ -3,6 +3,11 @@
|
|||||||
--source include/have_debug.inc
|
--source include/have_debug.inc
|
||||||
--source include/have_debug_sync.inc
|
--source include/have_debug_sync.inc
|
||||||
--source include/big_test.inc
|
--source include/big_test.inc
|
||||||
|
# The test involves a crash which does not seem to be handled well with
|
||||||
|
# mysql-test/lib/My/SafeProcess/my_safe_process under valgrind as it hangs
|
||||||
|
# forever. The test did not mean to verify the memory leaks so not much
|
||||||
|
# coverage should be missed by not running it under valgrind.
|
||||||
|
--source include/not_valgrind.inc
|
||||||
|
|
||||||
--exec echo > $MYSQLTEST_VARDIR/log/mysqld.1.err
|
--exec echo > $MYSQLTEST_VARDIR/log/mysqld.1.err
|
||||||
|
|
||||||
@@ -10,16 +15,18 @@
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
# Set it to the minimum so that we can make the binlog rotate with a few inserts
|
||||||
|
SET GLOBAL MAX_BINLOG_SIZE = 4096;
|
||||||
SET GLOBAL ROCKSDB_ENABLE_2PC = ON;
|
SET GLOBAL ROCKSDB_ENABLE_2PC = ON;
|
||||||
create table t1 (a int primary key, b int, c varchar(255)) engine=rocksdb;
|
create table t1 (a int primary key, b int, c varchar(255)) engine=rocksdb;
|
||||||
|
|
||||||
connect (con1, localhost, root,,);
|
connect (con1, localhost, root,,);
|
||||||
connect (con2, localhost, root,,);
|
connect (con2, localhost, root,,);
|
||||||
|
|
||||||
# On connection one we insert a row and pause after commit marker is written to WAL.
|
# On connection one we insert a row and pause after prepare marker is written to
|
||||||
# Connection two then inserts many rows. After connection two
|
# WAL. Connection two then inserts many rows to rotate the binlog. After
|
||||||
# completes connection one continues only to crash before commit but after
|
# connection two completes, connection one continues only to crash before commit
|
||||||
# binlog write. On crash recovery we see that connection one's value
|
# but after binlog write. On crash recovery we see that connection one's value
|
||||||
# has been recovered and commited
|
# has been recovered and commited
|
||||||
connection con1;
|
connection con1;
|
||||||
--echo 'con1'
|
--echo 'con1'
|
||||||
@@ -35,14 +42,14 @@ insert into t1 values (2, 1, "i_am_just_here_to_trigger_a_flush");
|
|||||||
|
|
||||||
# Disable 2PC and syncing for faster inserting of dummy rows
|
# Disable 2PC and syncing for faster inserting of dummy rows
|
||||||
# These rows only purpose is to rotate the binlog
|
# These rows only purpose is to rotate the binlog
|
||||||
SET GLOBAL ROCKSDB_ENABLE_2PC = OFF;
|
SET GLOBAL ROCKSDB_FLUSH_LOG_AT_TRX_COMMIT = 0;
|
||||||
SET GLOBAL ROCKSDB_WRITE_SYNC = OFF;
|
|
||||||
SET GLOBAL SYNC_BINLOG = 0;
|
SET GLOBAL SYNC_BINLOG = 0;
|
||||||
|
|
||||||
SET DEBUG_SYNC='now WAIT_FOR parked';
|
SET DEBUG_SYNC='now WAIT_FOR parked';
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--let $pk= 3
|
--let $pk= 3
|
||||||
while ($pk < 1000000) {
|
# binlog size is 4096 bytes so with that many insertion it will definitely rotate
|
||||||
|
while ($pk < 4096) {
|
||||||
eval insert into t1 values ($pk, 1, "foobardatagoesheresothatmorelogsrollwhichiswhatwewant");
|
eval insert into t1 values ($pk, 1, "foobardatagoesheresothatmorelogsrollwhichiswhatwewant");
|
||||||
--inc $pk
|
--inc $pk
|
||||||
}
|
}
|
||||||
@@ -50,18 +57,16 @@ while ($pk < 1000000) {
|
|||||||
|
|
||||||
# re-enable 2PC an syncing then write to trigger a flush
|
# re-enable 2PC an syncing then write to trigger a flush
|
||||||
# before we trigger the crash to simulate full-durability
|
# before we trigger the crash to simulate full-durability
|
||||||
SET GLOBAL ROCKSDB_ENABLE_2PC = ON;
|
SET GLOBAL ROCKSDB_FLUSH_LOG_AT_TRX_COMMIT = 2;
|
||||||
SET GLOBAL ROCKSDB_WRITE_SYNC = ON;
|
|
||||||
SET GLOBAL SYNC_BINLOG = 1;
|
SET GLOBAL SYNC_BINLOG = 1;
|
||||||
|
|
||||||
insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush");
|
insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush");
|
||||||
|
|
||||||
SET DEBUG_SYNC='now SIGNAL go';
|
SET DEBUG_SYNC='now SIGNAL go';
|
||||||
|
--source include/wait_until_disconnected.inc
|
||||||
--enable_reconnect
|
--enable_reconnect
|
||||||
--source include/wait_until_connected_again.inc
|
--source include/wait_until_connected_again.inc
|
||||||
|
--disable_reconnect
|
||||||
--exec sleep 60
|
|
||||||
|
|
||||||
--exec python suite/rocksdb/t/check_log_for_xa.py $MYSQLTEST_VARDIR/log/mysqld.1.err commit,prepare,rollback
|
--exec python suite/rocksdb/t/check_log_for_xa.py $MYSQLTEST_VARDIR/log/mysqld.1.err commit,prepare,rollback
|
||||||
|
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
--source include/rpl_ddl_high_priority.inc
|
4
storage/rocksdb/mysql-test/rocksdb_sys_vars/my.cnf
Normal file
4
storage/rocksdb/mysql-test/rocksdb_sys_vars/my.cnf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
!include include/default_my.cnf
|
||||||
|
|
||||||
|
[server]
|
||||||
|
rocksdb_force_compute_memtable_stats_cachetime=0
|
@@ -0,0 +1,100 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES('on');
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
SET @start_session_value = @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
SELECT @start_session_value;
|
||||||
|
@start_session_value
|
||||||
|
0
|
||||||
|
'# Setting to valid values in global scope#'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 1"
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 1;
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 0"
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 0;
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to on"
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = on;
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
'# Setting to valid values in session scope#'
|
||||||
|
"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 1"
|
||||||
|
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 1;
|
||||||
|
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
1
|
||||||
|
"Setting the session scope variable back to default"
|
||||||
|
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
|
||||||
|
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 0"
|
||||||
|
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 0;
|
||||||
|
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
"Setting the session scope variable back to default"
|
||||||
|
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
|
||||||
|
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to on"
|
||||||
|
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = on;
|
||||||
|
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
1
|
||||||
|
"Setting the session scope variable back to default"
|
||||||
|
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
|
||||||
|
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
'# Testing with invalid values in global scope #'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 'aaa'"
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 'aaa';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 'bbb'"
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 'bbb';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = @start_global_value;
|
||||||
|
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = @start_session_value;
|
||||||
|
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
|
||||||
|
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
0
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,14 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(1024);
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_CONCURRENT_PREPARE;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
1
|
||||||
|
"Trying to set variable @@global.ROCKSDB_CONCURRENT_PREPARE to 444. It should fail because it is readonly."
|
||||||
|
SET @@global.ROCKSDB_CONCURRENT_PREPARE = 444;
|
||||||
|
ERROR HY000: Variable 'rocksdb_concurrent_prepare' is a read only variable
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,79 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(100);
|
||||||
|
INSERT INTO valid_values VALUES(2);
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'123\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
50
|
||||||
|
SET @start_session_value = @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
SELECT @start_session_value;
|
||||||
|
@start_session_value
|
||||||
|
50
|
||||||
|
'# Setting to valid values in global scope#'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH to 100"
|
||||||
|
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = 100;
|
||||||
|
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
100
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
50
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH to 2"
|
||||||
|
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = 2;
|
||||||
|
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
2
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
50
|
||||||
|
'# Setting to valid values in session scope#'
|
||||||
|
"Trying to set variable @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH to 100"
|
||||||
|
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = 100;
|
||||||
|
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
100
|
||||||
|
"Setting the session scope variable back to default"
|
||||||
|
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = DEFAULT;
|
||||||
|
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
50
|
||||||
|
"Trying to set variable @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH to 2"
|
||||||
|
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = 2;
|
||||||
|
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
2
|
||||||
|
"Setting the session scope variable back to default"
|
||||||
|
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = DEFAULT;
|
||||||
|
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
50
|
||||||
|
'# Testing with invalid values in global scope #'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH to 'aaa'"
|
||||||
|
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = 'aaa';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
50
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH to '123'"
|
||||||
|
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = '123';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
50
|
||||||
|
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = @start_global_value;
|
||||||
|
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
50
|
||||||
|
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = @start_session_value;
|
||||||
|
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
|
||||||
|
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
50
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,64 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES('on');
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
'# Setting to valid values in global scope#'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to 1"
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = 1;
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to 0"
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = 0;
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
0
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to on"
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = on;
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
0
|
||||||
|
"Trying to set variable @@session.ROCKSDB_DEBUG_TTL_IGNORE_PK to 444. It should fail because it is not session."
|
||||||
|
SET @@session.ROCKSDB_DEBUG_TTL_IGNORE_PK = 444;
|
||||||
|
ERROR HY000: Variable 'rocksdb_debug_ttl_ignore_pk' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
'# Testing with invalid values in global scope #'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to 'aaa'"
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = 'aaa';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to 'bbb'"
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = 'bbb';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
0
|
||||||
|
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = @start_global_value;
|
||||||
|
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
|
||||||
|
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
0
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -1,7 +1,7 @@
|
|||||||
DROP TABLE IF EXISTS t;
|
DROP TABLE IF EXISTS t;
|
||||||
CREATE TABLE t (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb;
|
CREATE TABLE t (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb;
|
||||||
INSERT INTO t (a,b) VALUES (1,'bar'),(2,'foo');
|
INSERT INTO t (a,b) VALUES (1,'bar'),(2,'foo');
|
||||||
SET @ORIG_PAUSE_BACKGROUND_WORK = @@rocksdb_force_compute_memtable_stats;
|
SET @ORIG_FORCE_COMPUTE_MEMTABLE_STATS = @@rocksdb_force_compute_memtable_stats;
|
||||||
set global rocksdb_force_flush_memtable_now = true;
|
set global rocksdb_force_flush_memtable_now = true;
|
||||||
INSERT INTO t (a,b) VALUES (3,'dead'),(4,'beef'),(5,'a'),(6,'bbb'),(7,'c'),(8,'d');
|
INSERT INTO t (a,b) VALUES (3,'dead'),(4,'beef'),(5,'a'),(6,'bbb'),(7,'c'),(8,'d');
|
||||||
set global rocksdb_force_compute_memtable_stats=0;
|
set global rocksdb_force_compute_memtable_stats=0;
|
||||||
@@ -12,4 +12,4 @@ select case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' e
|
|||||||
case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' else 'false' end
|
case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' else 'false' end
|
||||||
true
|
true
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
set global rocksdb_force_compute_memtable_stats = @ORIG_PAUSE_BACKGROUND_WORK;
|
set global rocksdb_force_compute_memtable_stats = @ORIG_FORCE_COMPUTE_MEMTABLE_STATS;
|
||||||
|
@@ -0,0 +1,68 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(1024);
|
||||||
|
INSERT INTO valid_values VALUES(1024 * 1024 * 1024);
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
'# Setting to valid values in global scope#'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 0"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 0;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
0
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
60000000
|
||||||
|
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 1"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 1;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
60000000
|
||||||
|
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 1024"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 1024;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
1024
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
60000000
|
||||||
|
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 1073741824"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 1073741824;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
1073741824
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
60000000
|
||||||
|
"Trying to set variable @@session.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 444. It should fail because it is not session."
|
||||||
|
SET @@session.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 444;
|
||||||
|
ERROR HY000: Variable 'rocksdb_force_compute_memtable_stats_cachetime' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
'# Testing with invalid values in global scope #'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 'aaa'"
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 'aaa';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
60000000
|
||||||
|
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = @start_global_value;
|
||||||
|
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
|
||||||
|
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
0
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,64 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES('on');
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
'# Setting to valid values in global scope#'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to 1"
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = 1;
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to 0"
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = 0;
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
0
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to on"
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = on;
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
0
|
||||||
|
"Trying to set variable @@session.ROCKSDB_LARGE_PREFIX to 444. It should fail because it is not session."
|
||||||
|
SET @@session.ROCKSDB_LARGE_PREFIX = 444;
|
||||||
|
ERROR HY000: Variable 'rocksdb_large_prefix' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
'# Testing with invalid values in global scope #'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to 'aaa'"
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = 'aaa';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to 'bbb'"
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = 'bbb';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
0
|
||||||
|
SET @@global.ROCKSDB_LARGE_PREFIX = @start_global_value;
|
||||||
|
SELECT @@global.ROCKSDB_LARGE_PREFIX;
|
||||||
|
@@global.ROCKSDB_LARGE_PREFIX
|
||||||
|
0
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,14 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(1024);
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_MANUAL_WAL_FLUSH;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
1
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MANUAL_WAL_FLUSH to 444. It should fail because it is readonly."
|
||||||
|
SET @@global.ROCKSDB_MANUAL_WAL_FLUSH = 444;
|
||||||
|
ERROR HY000: Variable 'rocksdb_manual_wal_flush' is a read only variable
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,53 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(100);
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'123\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
5
|
||||||
|
'# Setting to valid values in global scope#'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MAX_LATEST_DEADLOCKS to 100"
|
||||||
|
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = 100;
|
||||||
|
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
|
||||||
|
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
|
||||||
|
100
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
|
||||||
|
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
|
||||||
|
5
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MAX_LATEST_DEADLOCKS to 1"
|
||||||
|
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = 1;
|
||||||
|
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
|
||||||
|
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
|
||||||
|
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
|
||||||
|
5
|
||||||
|
"Trying to set variable @@session.ROCKSDB_MAX_LATEST_DEADLOCKS to 444. It should fail because it is not session."
|
||||||
|
SET @@session.ROCKSDB_MAX_LATEST_DEADLOCKS = 444;
|
||||||
|
ERROR HY000: Variable 'rocksdb_max_latest_deadlocks' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
'# Testing with invalid values in global scope #'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MAX_LATEST_DEADLOCKS to 'aaa'"
|
||||||
|
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = 'aaa';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
|
||||||
|
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
|
||||||
|
5
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MAX_LATEST_DEADLOCKS to '123'"
|
||||||
|
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = '123';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
|
||||||
|
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
|
||||||
|
5
|
||||||
|
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = @start_global_value;
|
||||||
|
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
|
||||||
|
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
|
||||||
|
5
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,93 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
INSERT INTO invalid_values VALUES('on');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
SET @start_session_value = @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
SELECT @start_session_value;
|
||||||
|
@start_session_value
|
||||||
|
0
|
||||||
|
'# Setting to valid values in global scope#'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 1"
|
||||||
|
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 1;
|
||||||
|
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
1
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 0"
|
||||||
|
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 0;
|
||||||
|
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
"Setting the global scope variable back to default"
|
||||||
|
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = DEFAULT;
|
||||||
|
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
'# Setting to valid values in session scope#'
|
||||||
|
"Trying to set variable @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 1"
|
||||||
|
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 1;
|
||||||
|
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
1
|
||||||
|
"Setting the session scope variable back to default"
|
||||||
|
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = DEFAULT;
|
||||||
|
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
"Trying to set variable @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 0"
|
||||||
|
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 0;
|
||||||
|
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
"Setting the session scope variable back to default"
|
||||||
|
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = DEFAULT;
|
||||||
|
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
'# Testing with invalid values in global scope #'
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 'aaa'"
|
||||||
|
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 'aaa';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 'bbb'"
|
||||||
|
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 'bbb';
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to on"
|
||||||
|
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = on;
|
||||||
|
Got one of the listed errors
|
||||||
|
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = @start_global_value;
|
||||||
|
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = @start_session_value;
|
||||||
|
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
|
||||||
|
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
0
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
||||||
|
set session rocksdb_merge_buf_size=250;
|
||||||
|
set session rocksdb_merge_combine_read_size=1000;
|
||||||
|
set session rocksdb_merge_tmp_file_removal_delay_ms=1000;
|
||||||
|
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
|
||||||
|
ALTER TABLE t1 ADD INDEX kj(j), ALGORITHM=INPLACE;
|
||||||
|
include/assert.inc [Alter should have taken at least 10 seconds]
|
||||||
|
DROP TABLE t1;
|
@@ -0,0 +1,7 @@
|
|||||||
|
SET @start_global_value = @@global.ROCKSDB_SIM_CACHE_SIZE;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_SIM_CACHE_SIZE to 444. It should fail because it is readonly."
|
||||||
|
SET @@global.ROCKSDB_SIM_CACHE_SIZE = 444;
|
||||||
|
ERROR HY000: Variable 'rocksdb_sim_cache_size' is a read only variable
|
@@ -0,0 +1,19 @@
|
|||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES('on');
|
||||||
|
INSERT INTO valid_values VALUES('off');
|
||||||
|
INSERT INTO valid_values VALUES('true');
|
||||||
|
INSERT INTO valid_values VALUES('false');
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
SET @start_global_value = @@global.ROCKSDB_USE_CLOCK_CACHE;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
0
|
||||||
|
"Trying to set variable @@global.ROCKSDB_USE_CLOCK_CACHE to 444. It should fail because it is readonly."
|
||||||
|
SET @@global.ROCKSDB_USE_CLOCK_CACHE = 444;
|
||||||
|
ERROR HY000: Variable 'rocksdb_use_clock_cache' is a read only variable
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,18 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES('on');
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
|
||||||
|
--let $read_only=0
|
||||||
|
--let $session=1
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,16 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(1024);
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_CONCURRENT_PREPARE
|
||||||
|
--let $read_only=1
|
||||||
|
--let $session=0
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,17 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(100);
|
||||||
|
INSERT INTO valid_values VALUES(2);
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'123\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_DEADLOCK_DETECT_DEPTH
|
||||||
|
--let $read_only=0
|
||||||
|
--let $session=1
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,18 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES('on');
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_DEBUG_TTL_IGNORE_PK
|
||||||
|
--let $read_only=0
|
||||||
|
--let $session=0
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -6,7 +6,7 @@ DROP TABLE IF EXISTS t;
|
|||||||
CREATE TABLE t (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb;
|
CREATE TABLE t (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb;
|
||||||
INSERT INTO t (a,b) VALUES (1,'bar'),(2,'foo');
|
INSERT INTO t (a,b) VALUES (1,'bar'),(2,'foo');
|
||||||
|
|
||||||
SET @ORIG_PAUSE_BACKGROUND_WORK = @@rocksdb_force_compute_memtable_stats;
|
SET @ORIG_FORCE_COMPUTE_MEMTABLE_STATS = @@rocksdb_force_compute_memtable_stats;
|
||||||
set global rocksdb_force_flush_memtable_now = true;
|
set global rocksdb_force_flush_memtable_now = true;
|
||||||
|
|
||||||
INSERT INTO t (a,b) VALUES (3,'dead'),(4,'beef'),(5,'a'),(6,'bbb'),(7,'c'),(8,'d');
|
INSERT INTO t (a,b) VALUES (3,'dead'),(4,'beef'),(5,'a'),(6,'bbb'),(7,'c'),(8,'d');
|
||||||
@@ -20,4 +20,4 @@ SELECT TABLE_ROWS INTO @ROWS_INCLUDE_MEMTABLE FROM information_schema.TABLES WHE
|
|||||||
select case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' else 'false' end;
|
select case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' else 'false' end;
|
||||||
|
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
set global rocksdb_force_compute_memtable_stats = @ORIG_PAUSE_BACKGROUND_WORK;
|
set global rocksdb_force_compute_memtable_stats = @ORIG_FORCE_COMPUTE_MEMTABLE_STATS;
|
||||||
|
@@ -0,0 +1,18 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(1024);
|
||||||
|
INSERT INTO valid_values VALUES(1024 * 1024 * 1024);
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
|
||||||
|
--let $read_only=0
|
||||||
|
--let $session=0
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,18 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES('on');
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_LARGE_PREFIX
|
||||||
|
--let $read_only=0
|
||||||
|
--let $session=0
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,16 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(1024);
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_MANUAL_WAL_FLUSH
|
||||||
|
--let $read_only=1
|
||||||
|
--let $session=0
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,17 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(100);
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'123\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_MAX_LATEST_DEADLOCKS
|
||||||
|
--let $read_only=0
|
||||||
|
--let $session=0
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -0,0 +1,49 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
INSERT INTO invalid_values VALUES('on');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
|
||||||
|
--let $read_only=0
|
||||||
|
--let $session=1
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
||||||
|
|
||||||
|
set session rocksdb_merge_buf_size=250;
|
||||||
|
set session rocksdb_merge_combine_read_size=1000;
|
||||||
|
set session rocksdb_merge_tmp_file_removal_delay_ms=1000;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
let $max = 100;
|
||||||
|
let $i = 1;
|
||||||
|
while ($i <= $max) {
|
||||||
|
let $insert = INSERT INTO t1 VALUES ($i, FLOOR(RAND() * 100));
|
||||||
|
inc $i;
|
||||||
|
eval $insert;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
let $start= `SELECT UNIX_TIMESTAMP()`;
|
||||||
|
# this should take a lot longer than normal because each deleted merge file
|
||||||
|
# will sleep for 1 secs. There should be about 13 buffers.
|
||||||
|
# So it should take at least 13 secs
|
||||||
|
ALTER TABLE t1 ADD INDEX kj(j), ALGORITHM=INPLACE;
|
||||||
|
let $stop_exec= `SELECT UNIX_TIMESTAMP()`;
|
||||||
|
|
||||||
|
let $time_diff= `SELECT ($stop_exec - $start)`;
|
||||||
|
let $assert_text= Alter should have taken at least 10 seconds;
|
||||||
|
let $assert_cond= $time_diff >= 10;
|
||||||
|
source include/assert.inc;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
@@ -0,0 +1,6 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_SIM_CACHE_SIZE
|
||||||
|
--let $read_only=1
|
||||||
|
--let $session=0
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
@@ -0,0 +1,21 @@
|
|||||||
|
--source include/have_rocksdb.inc
|
||||||
|
|
||||||
|
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO valid_values VALUES(1);
|
||||||
|
INSERT INTO valid_values VALUES(0);
|
||||||
|
INSERT INTO valid_values VALUES('on');
|
||||||
|
INSERT INTO valid_values VALUES('off');
|
||||||
|
INSERT INTO valid_values VALUES('true');
|
||||||
|
INSERT INTO valid_values VALUES('false');
|
||||||
|
|
||||||
|
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
|
||||||
|
INSERT INTO invalid_values VALUES('\'aaa\'');
|
||||||
|
INSERT INTO invalid_values VALUES('\'bbb\'');
|
||||||
|
|
||||||
|
--let $sys_var=ROCKSDB_USE_CLOCK_CACHE
|
||||||
|
--let $read_only=1
|
||||||
|
--let $session=0
|
||||||
|
--source ../include/rocksdb_sys_var.inc
|
||||||
|
|
||||||
|
DROP TABLE valid_values;
|
||||||
|
DROP TABLE invalid_values;
|
@@ -359,6 +359,22 @@ public:
|
|||||||
DBUG_ASSERT(pos < get_current_pos() && (pos + 1) < get_current_pos());
|
DBUG_ASSERT(pos < get_current_pos() && (pos + 1) < get_current_pos());
|
||||||
rdb_netbuf_store_uint16(m_data.data() + pos, new_val);
|
rdb_netbuf_store_uint16(m_data.data() + pos, new_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void truncate(const size_t &pos) {
|
||||||
|
DBUG_ASSERT(0 <= pos && pos < m_data.size());
|
||||||
|
m_data.resize(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void allocate(const size_t &len, const uchar &val = 0) {
|
||||||
|
DBUG_ASSERT(len > 0);
|
||||||
|
m_data.resize(m_data.size() + len, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
An awful hack to deallocate the buffer without relying on the deconstructor.
|
||||||
|
This is needed to suppress valgrind errors in rocksdb.partition
|
||||||
|
*/
|
||||||
|
void free() { std::vector<uchar>().swap(m_data); }
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -138,6 +138,14 @@ public:
|
|||||||
gl_index_id.cf_id, gl_index_id.index_id);
|
gl_index_id.cf_id, gl_index_id.index_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
if (rdb_dbug_set_ttl_ignore_pk() &&
|
||||||
|
index_info.m_index_type == Rdb_key_def::INDEX_TYPE_PRIMARY) {
|
||||||
|
*ttl_duration = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
*ttl_duration = index_info.m_ttl_duration;
|
*ttl_duration = index_info.m_ttl_duration;
|
||||||
if (Rdb_key_def::has_index_flag(index_info.m_index_flags,
|
if (Rdb_key_def::has_index_flag(index_info.m_index_flags,
|
||||||
Rdb_key_def::TTL_FLAG)) {
|
Rdb_key_def::TTL_FLAG)) {
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user