tiflash列式存储,tikv是行式存储,存储上就占有优势。tidb中创建表,默认都是tikv的。
1,检查tiflash是不是开启
$ tiup ctl pd -u http://10.0.10.17:2379 -i //-i交互模式 Found ctl newer version: The latest version: v5.0.0-rc Local installed version: v4.0.9 Update current component: tiup update ctl Update all components: tiup update --all Starting component `ctl`: /home/tidb/.tiup/components/ctl/v4.0.9/ctl pd -u http://10.0.10.17:2379 -i » config show replication { "max-replicas": 3, "location-labels": "", "strictly-match-label": "false", "enable-placement-rules": "true" //如果为ture就开启了 } » config placement-rules enable //开启 » config placement-rules disable //关闭 » config show all //能看到集群中很多配置,但是新手不建议调整
2,创建测试表
mysql> CREATE TABLE `user` ( -> `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', -> `sex` int(1) NOT NULL DEFAULT '0' COMMENT 'sex', -> `name` varchar(20) COLLATE utf8_bin DEFAULT NULL, -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='user'; Query OK, 0 rows affected (0.19 sec) mysql> insert into user(sex,name)values(1,'tank'); Query OK, 1 row affected (0.04 sec) mysql> desc select * from user; +------------------------+----------+-----------+---------------+------------------------------------------------+ | id | estRows | task | access object | operator info | +------------------------+----------+-----------+---------------+------------------------------------------------+ | TableReader_5 | 10000.00 | root | | data:TableRangeScan_4 | | └─TableRangeScan_4 | 10000.00 | cop[tikv] | table:user | range:[0,+inf], keep order:false, stats:pseudo | +------------------------+----------+-----------+---------------+------------------------------------------------+ 2 rows in set (0.00 sec)
cop[tikv],走的存储引擎是tikv
3,创建tiflash副本
mysql> ALTER TABLE user SET TIFLASH REPLICA 2; Query OK, 0 rows affected (0.29 sec) mysql> desc select * from user; +------------------------+---------+-----------+---------------+------------------------------------------------+ | id | estRows | task | access object | operator info | +------------------------+---------+-----------+---------------+------------------------------------------------+ | TableReader_5 | 1.00 | root | | data:TableRangeScan_4 | | └─TableRangeScan_4 | 1.00 | cop[tikv] | table:user | range:[0,+inf], keep order:false, stats:pseudo | +------------------------+---------+-----------+---------------+------------------------------------------------+ 2 rows in set (0.00 sec)
创建tiflash副本后,还是走的tikv。看看官方说明,对于创建了 TiFlash 副本的表,TiDB 优化器会自动根据代价估算选择是否使用 TiFlash 副本。具体有没有选择 TiFlash 副本,可以通过 desc 或 explain analyze 语句查看。
也就是说用不用tiflash,tidb自己选择
4,查看tiflash副本是不是创建成功
mysql> SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'user'; +--------------+------------+----------+---------------+-----------------+-----------+----------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS | +--------------+------------+----------+---------------+-----------------+-----------+----------+ | test | user | 9062 | 2 | | 1 | 1 | +--------------+------------+----------+---------------+-----------------+-----------+----------+ 1 row in set (0.00 sec) mysql> SELECT * FROM information_schema.tiflash_replica; +--------------+------------+----------+---------------+-----------------+-----------+----------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS | +--------------+------------+----------+---------------+-----------------+-----------+----------+ | test | user | 9062 | 2 | | 1 | 1 | +--------------+------------+----------+---------------+-----------------+-----------+----------+ 1 row in set (0.00 sec)
AVAILABLE表示可用,PROGRESS表示生成副本的进度
mysql> select @@tidb_isolation_read_engines; //读的引擎有3种 +-------------------------------+ | @@tidb_isolation_read_engines | +-------------------------------+ | tikv, tiflash, tidb | +-------------------------------+ 1 row in set (0.00 sec) mysql> desc select /*+ read_from_storage(tikv[user] )*/ * from user; //强制使用tikv +------------------------+---------+-----------+---------------+------------------------------------------------+ | id | estRows | task | access object | operator info | +------------------------+---------+-----------+---------------+------------------------------------------------+ | TableReader_5 | 1.00 | root | | data:TableRangeScan_4 | | └─TableRangeScan_4 | 1.00 | cop[tikv] | table:user | range:[0,+inf], keep order:false, stats:pseudo | +------------------------+---------+-----------+---------------+------------------------------------------------+ 2 rows in set (0.00 sec) mysql> desc select /*+ read_from_storage(tiflash[user] )*/ * from user; //强制使用tiflash +------------------------+---------+--------------+---------------+------------------------------------------------+ | id | estRows | task | access object | operator info | +------------------------+---------+--------------+---------------+------------------------------------------------+ | TableReader_5 | 1.00 | root | | data:TableRangeScan_4 | | └─TableRangeScan_4 | 1.00 | cop[tiflash] | table:user | range:[0,+inf], keep order:false, stats:pseudo | +------------------------+---------+--------------+---------------+------------------------------------------------+ 2 rows in set (0.00 sec)
5,正式数据测试速度
mysql> desc select count(1) from video_report; +----------------------------+------------+-----------+-------------------------------------------------------------------+-----------------------------------+ | id | estRows | task | access object | operator info | +----------------------------+------------+-----------+-------------------------------------------------------------------+-----------------------------------+ | StreamAgg_24 | 1.00 | root | | funcs:count(Column#88)->Column#77 | | └─IndexReader_25 | 1.00 | root | | index:StreamAgg_8 | | └─StreamAgg_8 | 1.00 | cop[tikv] | | funcs:count(1)->Column#88 | | └─IndexFullScan_23 | 8123356.00 | cop[tikv] | table:video_report, index:video_report_signature_index(signature) | keep order:false | +----------------------------+------------+-----------+-------------------------------------------------------------------+-----------------------------------+ 4 rows in set (0.00 sec) mysql> select count(1) from video_report; +----------+ | count(1) | +----------+ | 8218538 | +----------+ 1 row in set (0.61 sec) mysql> ALTER TABLE video_report SET TIFLASH REPLICA 2; Query OK, 0 rows affected (0.25 sec) mysql> SELECT * FROM information_schema.tiflash_replica; +--------------+--------------+----------+---------------+-----------------+-----------+----------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS | +--------------+--------------+----------+---------------+-----------------+-----------+----------+ | result_ziwei | video_report | 9030 | 2 | | 0 | 0.05 | | test | user | 9062 | 2 | | 1 | 1 | +--------------+--------------+----------+---------------+-----------------+-----------+----------+ 2 rows in set (0.00 sec) mysql> select count(1) from video_report; +----------+ | count(1) | +----------+ | 8218538 | +----------+ 1 row in set (0.05 sec)
要等一会,等到AVAILABLE变成1,PROGRESS变成1才能测试,测试的结果800多万,tiflash比tikv要快10倍左右。
6,删除tiflash副本
mysql> ALTER TABLE user SET TIFLASH REPLICA 0; Query OK, 0 rows affected (0.18 sec) mysql> SELECT * FROM information_schema.tiflash_replica; +--------------+--------------+----------+---------------+-----------------+-----------+----------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS | +--------------+--------------+----------+---------------+-----------------+-----------+----------+ | result_ziwei | video_report | 9030 | 2 | | 1 | 1 | +--------------+--------------+----------+---------------+-----------------+-----------+----------+ 1 row in set (0.00 sec)
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/tidb/2508.html