ããã¯ããªã«ãããããŠæžãããã®ïŒ
å°ãåã«ãTiDBã®QuickStartãè©ŠããŠã¿ãŸããã
Ubuntu Linux 22.04 LTSに、MySQL互換の分散データベースTiDBをインストールして(ローカルでクラスターを立ち上げて)みる - CLOVER🍀
QuickStartã¯ããã²ãšã€ãã£ãŠãHTAPã«é¢ãããã®ããããŸãã
Quick start with HTAP | PingCAP Docs
ä»åã¯ãã¡ããè©ŠããŠã¿ãããšæããŸãã
HTAP
QuickStartã«é²ãåã«ãHTAPèªäœã«ã€ããŠèŠãŠã¿ãŸããããTiDBã®ããã¥ã¡ã³ãã«ã¯HTAPèªäœã
HTAPãšã¯ãHybrid transactional/analytical processingãã®ç¥ã§ãOLTPãšOLAPã®äž¡æ¹ã®æ§è³ªã䜵ãæã€ããŒã¿ããŒã¹ã®ããšã§ãã
Hybrid transactional/analytical processing - Wikipedia
OLTPïŒonline transaction processingïŒã¯ãŠãŒã¶ãŒã®ãªã¯ãšã¹ãã«å¿çãããªã¢ã«ã¿ã€ã ã§åŠçããããšãæåŸ
ããããã®ã§ãã
ãã䜿çšããRDBMSã¯ãã¡ãã®æ§è³ªã§ããã
Online transaction processing - Wikipedia
OLAPïŒOnline analytical processingïŒã¯ã倧éã®ããŒã¿ãåæãéèšããããšãæåŸ
ããããã®ã§ãã
Online analytical processing - Wikipedia
ããããæ§è³ªãç°ãªãã®ã§ãéåžžããŒã¿ããŒã¹ã¯ã©ã¡ããã«ç¹åããããšãå€ãã®ã§ããããã®äž¡æ¹ã®æ§è³ªã䜵ãæã€ã®ãHTAPãšãã
æãæ¹ã§ããããã§ãã
TiDBã®HTAPã®QuickStart
ä»ååç
§ããTiDBã®HTAPã®QuickStartã¯ãã¡ãã§ãã
Quick start with HTAP | PingCAP Docs
ãã®å
容ã«æ²¿ã£ãŠé²ããã®ã§ãããåºæ¬çãªã³ã³ã»ããã¯ç®ãéããŠãããŸãããã
Quick Start Guide for TiDB HTAP / Basic concepts
åæç¥èãšããŠãTiDB OLTPåãã®è¡ããŒã¹ã¹ãã¬ãŒãžãšã³ãžã³ã§ããTiKVãTiDB OLAPåãã®ã¹ãã¬ãŒãžãšã³ãžã³ã§ããTiFlashã«é¢ãã
åºæ¬çãªç¥èã¯æã£ãŠããå¿
èŠãããããšãããŠããŸãã
ããã¯ãŸãä»åºŠèŠãŸãããâŠã
ç¶ããŠããå
容ããŸãšããŸãã
- HTAPã®ã¹ãã¬ãŒãžãšã³ãžã³
- HTAPã§ã¯è¡ããŒã¹ã®ã¹ãã¬ãŒãžãšã³ãžã³ãšåæåïŒã«ã©ã ãïŒã®ã¹ãã¬ãŒãžãšã³ãžã³ãå
±åãã
- ã©ã¡ãã®ã¹ãã¬ãŒãžãšã³ãžã³ãããŒã¿ãèªåçã«ã¬ããªã±ãŒã·ã§ã³ãã匷ãäžè²«æ§ãç¶æãã
- è¡ããŒã¹ã®ã¹ãã¬ãŒãžãšã³ãžã³ã¯OLTPåãã«ãåæåã®ã¹ãã¬ãŒãžãšã³ãžã³ã¯OLAPåãã«ããã©ãŒãã³ã¹ãæé©åãã
- HTAPã®ããŒã¿ã®äžè²«æ§
- TiKVã¯åæ£åã®ãã©ã³ã¶ã¯ã·ã§ãã«ããŒããªã¥ãŒããŒã¿ããŒã¹ãšããŠãACIDæºæ ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããRaftã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ã®å®è£
ã«ããè€æ°ã®ã¬ããªã«ã®éã§ã®ããŒã¿ã®äžè²«æ§ãšé«å¯çšæ§ãä¿èšŒãã
- TiKVã®åæåã¹ãã¬ãŒãžæ¡åŒµæ©èœãšããŠãTiFlashã¯Raft Learnerã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ã«åŸã£ãŠãªã¢ã«ã¿ã€ã ã§TiKVããããŒã¿ãã¬ããªã±ãŒã·ã§ã³ããTiKVãšTiFlashã®éã§ããŒã¿ã®åŒ·ãäžè²«æ§ãé«ãã
- HTAPã®ããŒã¿ã®åé¢
- TiKVãšTiFlashã¯ãªãœãŒã¹åé¢ã®åé¡ã解決ããããã«ãç°ãªããã·ã³ã«ãããã€ã§ãã
- MPPã³ã³ãã¥ãŒãã£ã³ã°ãšã³ãžã³
- MPPã¯TiFlashã¹ãã¬ãŒãžãšã³ãžã³ã«ããæäŸãããåæ£ã³ã³ãã¥ãŒãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ã§ãããŒãéã®ããŒã¿äº€æãå¯èœã«ããé«æ§èœãé«ã¹ã«ãŒãããã®SQLã¢ã«ãŽãªãºã ãæäŸãã
- MPPã¢ãŒãã§ã¯ãåæã¯ãšãªãŒã®å®è¡æéã倧å¹
ã«ççž®ã§ãã
âŠãªããšãªãæå³ã¯ããããŸãããããããTiDBã®æ§æèŠçŽ ãšããããã¢ãŒããã¯ãã£ãŒã«é¢ããããã¥ã¡ã³ããçºããæ¹ãããããã§ããã
ããã§ã¯ãããããå
ã¯ãã®QuickStartã®å
容ãé²ããŠãããŸãã
ç°å¢
ä»åã®ç°å¢ã¯ããã¡ãã
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
$ uname -srvmpio
Linux 5.15.0-105-generic #115-Ubuntu SMP Mon Apr 15 09:52:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
MySQL Shellãäžéšäœ¿ããŸãã
$ mysqlsh --version
mysqlsh Ver 8.4.0 for Linux on x86_64 - for MySQL 8.4.0 (MySQL Community Server (GPL))
TiDBã®HTAPã®QuickStartãè©Šã
ã§ã¯ããã¡ãã®ããã¥ã¡ã³ãã«æ²¿ã£ãŠé²ããŠãããŸãã
Quick start with HTAP | PingCAP Docs
TiUpã®ã€ã³ã¹ããŒã«ã
$ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
$ . .bashrc
$ tiup --version
1.15.0 v1.15.0-nightly-9
Go Version: go1.21.9
Git Ref: master
GitHash: 42d1df362797b114297068688e374b22020e6c5a
TiDBã¯LTSã§ãã7.5.1ã§èµ·åããŸãã
$ tiup playground v7.5.1 --host 0.0.0.0
ãã¹ãããŒã¿çæããŒã«ã®ã€ã³ã¹ããŒã«ãšããŒã¿ã®äœæã
$ tiup install bench
$ tiup bench tpch --sf=1 prepare
ãã£ããæéãããããŸãâŠã
以äžãå®è¡æã®ãã°ã§ããFinishedãã衚瀺ããããå®äºã§ãã
creating nation
creating region
creating part
creating supplier
creating partsupp
creating customer
creating orders
creating lineitem
generating nation table
generate nation table done
generating region table
generate region table done
generating customers table
generate customers table done
generating suppliers table
generate suppliers table done
generating part/partsupplier tables
generate part/partsupplier tables done
generating orders/lineitem tables
generate orders/lineitem tables done
Finished
ããŒã¿ãµã€ãºã確èªããŠã¿ãŸãããã
æ¥ç¶ã
$ tiup client
ããŒã¿ã¯ãtestããŒã¿ããŒã¹ã«å
¥ã£ãŠããããã§ãã
my:root@172.17.0.2:4000=> show databases;
Database
INFORMATION_SCHEMA
METRICS_SCHEMA
PERFORMANCE_SCHEMA
mysql
test
(5 rows)
my:root@172.17.0.2:4000=> use test;
USE
my:root@172.17.0.2:4000=> show tables;
Tables_in_test
customer
lineitem
nation
orders
part
partsupp
region
supplier
(8 rows)
ããŒã¿ãµã€ãºã確èªããSQLã
SELECT
CONCAT(table_schema,'.',table_name) AS 'Table Name',
table_rows AS 'Number of Rows',
FORMAT_BYTES(data_length) AS 'Data Size',
FORMAT_BYTES(index_length) AS 'Index Size',
FORMAT_BYTES(data_length+index_length) AS'Total'
FROM
information_schema.TABLES
WHERE
table_schema='test';
çµæã
Table Name | Number of Rows | Data Size | Index Size | Total
test.nation | 25 | 2.44 KiB | 0 bytes | 2.44 KiB
test.region | 5 | 416 bytes | 0 bytes | 416 bytes
test.part | 215360 | 25.76 MiB | 0 bytes | 25.76 MiB
test.supplier | 10000 | 1.41 MiB | 0 bytes | 1.41 MiB
test.partsupp | 836864 | 124.93 MiB | 12.77 MiB | 137.70 MiB
test.customer | 150000 | 24.06 MiB | 0 bytes | 24.06 MiB
test.orders | 1504096 | 166.63 MiB | 0 bytes | 166.63 MiB
test.lineitem | 6071871 | 774.65 MiB | 92.65 MiB | 867.30 MiB
(8 rows)
ããŒã¿ã¯ã©ã³ãã ã«äœæããããããªã®ã§ãå®è¡ããšã«çµæãè¡æ°ã¯ç°ãªãããã§ããä»åã¯å
šäœã§çŽ900äžã¬ã³ãŒãã®ããŒã¿ã
äœãããããšã«ãªããŸãã
ã¡ãªã¿ã«ãtiup bench tpch prepare
ã¯ã¯ãŒã¯ããŒãåãã®ãã¹ãããŒã¿ãæºåããã³ãã³ãã§ãã
$ tiup bench tpch --help
Starting component bench: $HOME/.tiup/components/bench/v1.12.0/tiup-bench tpch --help
Usage:
go-tpc tpch [command]
Available Commands:
cleanup Cleanup data for the workload
prepare Prepare data for the workload
run Run workload
Flags:
--check Check output data, only when the scale factor equals 1
-h, --help help for tpch
--queries string All queries (default "q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22")
--sf int scale factor (default 1)
--use-explain execute explain analyze
Global Flags:
ãçç¥ã
tiup bench
ã§è€æ°ã®ãã³ãããŒã¯åãã®ããŒã¿ãçæã§ãããããªã®ã§ãããtpch
ãšããã®ã¯DWHã®æ§èœæ€èšŒåãã®TPC-Hã®ããšã§ããã
$ tiup bench --help
Starting component bench: $HOME/.tiup/components/bench/v1.12.0/tiup-bench --help
Usage: tiup bench {ch/rawsql/tpcc/tpch/ycsb} [flags]
話ãæ»ããŠã
åæåã®ã¹ãã¬ãŒãžãšã³ãžã³ã䜿ãåã«ããŸãã¯è¡ããŒã¹ã®ã¹ãã¬ãŒãžãšã³ãžã³ã䜿ã£ãç¶æ
ã§TiDBã®ããã©ãŒãã³ã¹ã確èªããŸãã
以äžã®ã¯ãšãªãŒãå®è¡ã
SELECT
l_orderkey,
SUM(
l_extendedprice * (1 - l_discount)
) AS revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '1996-01-01'
AND l_shipdate > DATE '1996-02-01'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate
limit 10;
çµæã
l_orderkey | revenue | o_orderdate | o_shippriority
5828933 | 386117.1688 | 1995-12-03T00:00:00Z | 0
1648647 | 373096.8642 | 1995-12-06T00:00:00Z | 0
1364641 | 352640.6056 | 1995-12-19T00:00:00Z | 0
3949606 | 347750.4435 | 1995-12-23T00:00:00Z | 0
4792161 | 347715.0509 | 1995-12-30T00:00:00Z | 0
4340739 | 347490.5251 | 1995-12-06T00:00:00Z | 0
1609574 | 342497.8886 | 1995-12-31T00:00:00Z | 0
3076934 | 338202.3259 | 1995-12-24T00:00:00Z | 0
3232933 | 337349.2536 | 1995-12-26T00:00:00Z | 0
2345058 | 335142.6104 | 1995-12-31T00:00:00Z | 0
(10 rows)
ããæéãããããŸãããããããã°ãMySQLãšéã£ãŠå®è¡æéãåºåãããŠããŸãããã
MySQL Shellã§ããçŽããŸãããã
$ mysqlsh root:@localhost:4000/test --sql
åãã¯ãšãªãŒã®å®è¡çµæã
+------------+-------------+-------------+----------------+
| l_orderkey | revenue | o_orderdate | o_shippriority |
+------------+-------------+-------------+----------------+
| 5828933 | 386117.1688 | 1995-12-03 | 0 |
| 1648647 | 373096.8642 | 1995-12-06 | 0 |
| 1364641 | 352640.6056 | 1995-12-19 | 0 |
| 3949606 | 347750.4435 | 1995-12-23 | 0 |
| 4792161 | 347715.0509 | 1995-12-30 | 0 |
| 4340739 | 347490.5251 | 1995-12-06 | 0 |
| 1609574 | 342497.8886 | 1995-12-31 | 0 |
| 3076934 | 338202.3259 | 1995-12-24 | 0 |
| 3232933 | 337349.2536 | 1995-12-26 | 0 |
| 2345058 | 335142.6104 | 1995-12-31 | 0 |
+------------+-------------+-------------+----------------+
10 rows in set (1.9028 sec)
ã¡ãªã¿ã«ãã®çµæã¯2åç®ã®ãã®ã§ããã£ãã·ã¥ãå¹ããŠã¡ãã£ãšéããªã£ãæ°ãããŸãâŠã
explain analyzeãèŠãŠãããŸãããã
explain analyze SELECT
l_orderkey,
SUM(
l_extendedprice * (1 - l_discount)
) AS revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '1996-01-01'
AND l_shipdate > DATE '1996-02-01'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate
limit 10;
çµæã
+
| id | estRows | actRows | task | access object | execution info | operator info | memory | disk |
+
| Projection_14 | 10.00 | 10 | root | | time:1.99s, loops:2, RU:5124.543791, Concurrency:OFF | test.lineitem.l_orderkey, Column#34, test.orders.o_orderdate, test.orders.o_shippriority | 40.9 KB | N/A |
| ââTopN_17 | 10.00 | 10 | root | | time:1.99s, loops:2 | Column#34:desc, test.orders.o_orderdate, offset:0, count:10 | 76.8 KB | N/A |
| ââHashAgg_22 | 674032.16 | 7664 | root | | time:1.98s, loops:11, partial_worker:{wall_time:1.981795359s, concurrency:5, task_num:17, tot_wait:9.885371099s, tot_exec:19.073106ms, tot_time:9.906871113s, max:1.981758925s, p95:1.981758925s}, final_worker:{wall_time:1.986458455s, concurrency:5, task_num:25, tot_wait:9.906349192s, tot_exec:23.550433ms, tot_time:9.929910195s, max:1.98641688s, p95:1.98641688s} | group by:Column#39, Column#40, Column#41, funcs:sum(Column#35)->Column#34, funcs:firstrow(Column#36)->test.orders.o_orderdate, funcs:firstrow(Column#37)->test.orders.o_shippriority, funcs:firstrow(Column#38)->test.lineitem.l_orderkey | 4.78 MB | N/A |
| ââProjection_77 | 1580588.37 | 16655 | root | | time:1.98s, loops:18, Concurrency:5 | mul(test.lineitem.l_extendedprice, minus(1, test.lineitem.l_discount))->Column#35, test.orders.o_orderdate->Column#36, test.orders.o_shippriority->Column#37, test.lineitem.l_orderkey->Column#38, test.lineitem.l_orderkey->Column#39, test.orders.o_orderdate->Column#40, test.orders.o_shippriority->Column#41 | 810.3 KB | N/A |
| ââIndexJoin_30 | 1580588.37 | 16655 | root | | time:1.98s, loops:18, inner:{total:8.41s, concurrency:5, task:15, construct:400.7ms, fetch:8s, build:5.16ms}, probe:36.2ms | inner join, inner:TableReader_26, outer key:test.orders.o_orderkey, inner key:test.lineitem.l_orderkey, equal cond:eq(test.orders.o_orderkey, test.lineitem.l_orderkey) | 19.5 MB | N/A |
| ââHashJoin_65(Build) | 391944.14 | 184087 | root | | time:224.5ms, loops:185, build_hash_table:{total:10.5ms, fetch:1.62ms, build:8.91ms}, probe:{concurrency:5, total:2.88s, max:578.8ms, probe:2.57s, fetch:305.8ms} | inner join, equal:[eq(test.customer.c_custkey, test.orders.o_custkey)] | 2.94 MB | 0 Bytes |
| â ââTableReader_71(Build) | 30317.61 | 30142 | root | | time:3.21ms, loops:31, cop_task: {num: 8, max: 938.9µs, min: 338.1µs, avg: 535µs, p95: 938.9µs, tot_proc: 11.3µs, tot_wait: 659.9µs, rpc_num: 8, rpc_time: 4.11ms, copr_cache_hit_ratio: 1.00, build_task_duration: 11.4µs, max_distsql_concurrency: 1} | data:Selection_70 | 497.6 KB | N/A |
| â â ââSelection_70 | 30317.61 | 30142 | cop[tikv] | | tikv_task:{proc max:60ms, min:0s, avg: 20.5ms, p80:40ms, p95:60ms, iters:179, tasks:8}, scan_detail: {get_snapshot_time: 362.4µs, rocksdb: {block: {}}} | eq(test.customer.c_mktsegment, "BUILDING") | N/A | N/A |
| â â ââTableFullScan_69 | 150000.00 | 150000 | cop[tikv] | table:customer | tikv_task:{proc max:52ms, min:0s, avg: 16ms, p80:28ms, p95:52ms, iters:179, tasks:8} | keep order:false | N/A | N/A |
| â ââTableReader_68(Probe) | 1135130.91 | 909968 | root | | time:40.5ms, loops:887, cop_task: {num: 42, max: 17.3ms, min: 336.1µs, avg: 2.48ms, p95: 11.7ms, tot_proc: 49.7µs, tot_wait: 14.1ms, rpc_num: 42, rpc_time: 102.8ms, copr_cache_hit_ratio: 1.00, build_task_duration: 10.8µs, max_distsql_concurrency: 3} | data:Selection_67 | 6.16 MB | N/A |
| â ââSelection_67 | 1135130.91 | 909968 | cop[tikv] | | tikv_task:{proc max:320ms, min:0s, avg: 96.6ms, p80:220ms, p95:312ms, iters:1630, tasks:42}, scan_detail: {get_snapshot_time: 1.42ms, rocksdb: {block: {}}} | lt(test.orders.o_orderdate, 1996-01-01) | N/A | N/A |
| â ââTableFullScan_66 | 1504096.00 | 1500000 | cop[tikv] | table:orders | tikv_task:{proc max:320ms, min:0s, avg: 92.7ms, p80:208ms, p95:300ms, iters:1630, tasks:42} | keep order:false | N/A | N/A |
| ââTableReader_26(Probe) | 175459.49 | 16655 | root | | time:7.59s, loops:42, cop_task: {num: 113, max: 503.5ms, min: 17.6ms, avg: 192ms, p95: 444ms, max_proc_keys: 24712, p95_proc_keys: 15988, tot_proc: 8.6s, tot_wait: 176.5ms, rpc_num: 113, rpc_time: 21.7s, copr_cache_hit_ratio: 0.04, build_task_duration: 9.73ms, max_distsql_concurrency: 6} | data:Selection_25 | N/A | N/A |
| ââSelection_25 | 175459.49 | 16655 | cop[tikv] | | tikv_task:{proc max:492ms, min:4ms, avg: 175.8ms, p80:284ms, p95:420ms, iters:1198, tasks:113}, scan_detail: {total_process_keys: 735390, total_process_keys_size: 142969563, total_keys: 919342, get_snapshot_time: 86.2ms, rocksdb: {key_skipped_count: 735390, block: {cache_hit_count: 716158}}} | gt(test.lineitem.l_shipdate, 1996-02-01) | N/A | N/A |
| ââTableRangeScan_24 | 391944.14 | 736133 | cop[tikv] | table:lineitem | tikv_task:{proc max:488ms, min:4ms, avg: 174.8ms, p80:284ms, p95:420ms, iters:1198, tasks:113} | range: decided by [eq(test.lineitem.l_orderkey, test.orders.o_orderkey)], keep order:false | N/A | N/A |
+
15 rows in set (1.9900 sec)
ã¡ãªã¿ã«ãã®ã¯ãšãªãŒã¯ã以äžã®å
容ã§ãã
- é
éã«é¢ãããã©ã€ãªãªãã£ãŒãã¥ãŒã§ãæå®ãããæ¥ãŸã§ã«åºè·ãããŠããªãæãåçã®é«ã泚æã®åªå
床ãšæœåšçãªåçãæäŸãã
- æœåšçãªåçã®èšç®åŒã¯
l_extendedprice * (1 - l_discount)
ã®åãšããŠå®çŸ©ãã
- 泚æã¯æœåšçãªåçã®éé ã§ãœãŒããããæªåºè·ã®äžäœ10件ãååŸãã
次ã«ãããŒã¿ãåæåã®ã¹ãã¬ãŒãžãšã³ãžã³ã«ã¬ããªã±ãŒã·ã§ã³ããŸãã
以äžã®ã¯ãšãªãŒãå®è¡ããããšã§ãæå®ã®ããŒãã«ãTiFlashã«ã¬ããªã±ãŒã·ã§ã³ããããšãã§ããŸãã
ALTER TABLE test.customer SET TIFLASH REPLICA 1;
ALTER TABLE test.orders SET TIFLASH REPLICA 1;
ALTER TABLE test.lineitem SET TIFLASH REPLICA 1;
å®è¡ã
MySQL localhost:4000 ssl test SQL > ALTER TABLE test.customer SET TIFLASH REPLICA 1;
Query OK, 0 rows affected (0.5111 sec)
MySQL localhost:4000 ssl test SQL > ALTER TABLE test.orders SET TIFLASH REPLICA 1;
Query OK, 0 rows affected (0.5125 sec)
MySQL localhost:4000 ssl test SQL > ALTER TABLE test.lineitem SET TIFLASH REPLICA 1;
Query OK, 0 rows affected (0.9729 sec)
åããŒãã«ã®ã¬ããªã±ãŒã·ã§ã³ã¹ããŒã¿ã¹ãã以äžã®ã¯ãšãªãŒã§ç¢ºèªããŸãã
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'customer';
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'orders';
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'lineitem';
ãããããçµæã
MySQL localhost:4000 ssl test SQL > SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'customer';
+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
+
| test | customer | 112 | 1 | | 1 | 1 |
+
1 row in set (0.0564 sec)
MySQL localhost:4000 ssl test SQL > SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'orders';
+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
+
| test | orders | 114 | 1 | | 1 | 1 |
+
1 row in set (0.0025 sec)
MySQL localhost:4000 ssl test SQL > SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'lineitem';
+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
+
| test | lineitem | 116 | 1 | | 1 | 1 |
+
1 row in set (0.0027 sec)
çµæã®åã«ã©ã ã®æå³ã¯ä»¥äžã«ãªããŸãã
AVAILABLE
⊠TiFlashã®ã¬ããªã«ãå©çšå¯èœãã©ããã1ã¯å©çšå¯èœã0ã¯å©çšäžå¯
PROGRESS
⊠ã¬ããªã±ãŒã·ã§ã³ã®é²è¡ç¶æ³ã0.0ã1.0ã§è¡šãã1ã¯ãTiFlashã®ã¬ããªã±ãŒã·ã§ã³ãå®äºããããšãè¡šã
ã§ã¯ã以äžã®ã¯ãšãªãŒããã1床å®è¡ããŠã¿ãŸãããã
SELECT
l_orderkey,
SUM(
l_extendedprice * (1 - l_discount)
) AS revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '1996-01-01'
AND l_shipdate > DATE '1996-02-01'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate
limit 10;
çµæã
+
| l_orderkey | revenue | o_orderdate | o_shippriority |
+
| 5828933 | 386117.1688 | 1995-12-03 | 0 |
| 1648647 | 373096.8642 | 1995-12-06 | 0 |
| 1364641 | 352640.6056 | 1995-12-19 | 0 |
| 3949606 | 347750.4435 | 1995-12-23 | 0 |
| 4792161 | 347715.0509 | 1995-12-30 | 0 |
| 4340739 | 347490.5251 | 1995-12-06 | 0 |
| 1609574 | 342497.8886 | 1995-12-31 | 0 |
| 3076934 | 338202.3259 | 1995-12-24 | 0 |
| 3232933 | 337349.2536 | 1995-12-26 | 0 |
| 2345058 | 335142.6104 | 1995-12-31 | 0 |
+
10 rows in set (1.7648 sec)
2åç®ä»¥éã¯ãããªããŸãããè¡ããŒã¹ã®ã¹ãã¬ãŒãžãšã³ãžã³ã®æãããéãã§ããã
+
| l_orderkey | revenue | o_orderdate | o_shippriority |
+
| 5828933 | 386117.1688 | 1995-12-03 | 0 |
| 1648647 | 373096.8642 | 1995-12-06 | 0 |
| 1364641 | 352640.6056 | 1995-12-19 | 0 |
| 3949606 | 347750.4435 | 1995-12-23 | 0 |
| 4792161 | 347715.0509 | 1995-12-30 | 0 |
| 4340739 | 347490.5251 | 1995-12-06 | 0 |
| 1609574 | 342497.8886 | 1995-12-31 | 0 |
| 3076934 | 338202.3259 | 1995-12-24 | 0 |
| 3232933 | 337349.2536 | 1995-12-26 | 0 |
| 2345058 | 335142.6104 | 1995-12-31 | 0 |
+
10 rows in set (0.3646 sec)
explain analyzeããŠã¿ãŸãããã
explain analyze SELECT
l_orderkey,
SUM(
l_extendedprice * (1 - l_discount)
) AS revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '1996-01-01'
AND l_shipdate > DATE '1996-02-01'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate
limit 10;
çµæã
+
| id | estRows | actRows | task | access object | execution info | operator info | memory | disk |
+
| Projection_14 | 10.00 | 10 | root | | time:271.1ms, loops:2, RU:0.000000, Concurrency:OFF | test.lineitem.l_orderkey, Column#34, test.orders.o_orderdate, test.orders.o_shippriority | 26.1 KB | N/A |
| ââTopN_18 | 10.00 | 10 | root | | time:271.1ms, loops:2 | Column#34:desc, test.orders.o_orderdate, offset:0, count:10 | 1.23 KB | N/A |
| ââTableReader_139 | 10.00 | 40 | root | | time:271.1ms, loops:3, cop_task: {num: 5, max: 0s, min: 0s, avg: 0s, p95: 0s, copr_cache_hit_ratio: 0.00} | MppVersion: 2, data:ExchangeSender_138 | 1.32 KB | N/A |
| ââExchangeSender_138 | 10.00 | 40 | mpp[tiflash] | | tiflash_task:{time:264.1ms, loops:4, threads:4} | ExchangeType: PassThrough | N/A | N/A |
| ââTopN_137 | 10.00 | 40 | mpp[tiflash] | | tiflash_task:{time:264.1ms, loops:4, threads:4} | Column#34:desc, test.orders.o_orderdate, offset:0, count:10 | N/A | N/A |
| ââProjection_133 | 674032.16 | 7664 | mpp[tiflash] | | tiflash_task:{time:264.1ms, loops:4, threads:4} | Column#34, test.orders.o_orderdate, test.orders.o_shippriority, test.lineitem.l_orderkey | N/A | N/A |
| ââHashAgg_134 | 674032.16 | 7664 | mpp[tiflash] | | tiflash_task:{time:264.1ms, loops:4, threads:4} | group by:test.lineitem.l_orderkey, test.orders.o_orderdate, test.orders.o_shippriority, funcs:sum(Column#43)->Column#34, funcs:firstrow(test.orders.o_orderdate)->test.orders.o_orderdate, funcs:firstrow(test.orders.o_shippriority)->test.orders.o_shippriority, funcs:firstrow(test.lineitem.l_orderkey)->test.lineitem.l_orderkey, stream_count: 4 | N/A | N/A |
| ââExchangeReceiver_136 | 674032.16 | 7664 | mpp[tiflash] | | tiflash_task:{time:264.1ms, loops:4, threads:4} | stream_count: 4 | N/A | N/A |
| ââExchangeSender_135 | 674032.16 | 7664 | mpp[tiflash] | | tiflash_task:{time:260.9ms, loops:1, threads:1} | ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.lineitem.l_orderkey, collate: binary], [name: test.orders.o_orderdate, collate: binary], [name: test.orders.o_shippriority, collate: binary], stream_count: 4 | N/A | N/A |
| ââHashAgg_131 | 674032.16 | 7664 | mpp[tiflash] | | tiflash_task:{time:256.9ms, loops:1, threads:1} | group by:Column#48, Column#49, Column#50, funcs:sum(Column#47)->Column#43 | N/A | N/A |
| ââProjection_140 | 1580588.37 | 16655 | mpp[tiflash] | | tiflash_task:{time:256.9ms, loops:92, threads:8} | mul(test.lineitem.l_extendedprice, minus(1, test.lineitem.l_discount))->Column#47, test.lineitem.l_orderkey->Column#48, test.orders.o_orderdate->Column#49, test.orders.o_shippriority->Column#50 | N/A | N/A |
| ââHashJoin_120 | 1580588.37 | 16655 | mpp[tiflash] | | tiflash_task:{time:256.9ms, loops:92, threads:8} | inner join, equal:[eq(test.orders.o_orderkey, test.lineitem.l_orderkey)], stream_count: 4 | N/A | N/A |
| ââExchangeReceiver_52(Build) | 391944.14 | 184087 | mpp[tiflash] | | tiflash_task:{time:172.9ms, loops:18, threads:4} | stream_count: 4 | N/A | N/A |
| â ââExchangeSender_51 | 391944.14 | 184087 | mpp[tiflash] | | tiflash_task:{time:158.7ms, loops:23, threads:8} | ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.orders.o_orderkey, collate: binary], stream_count: 4 | N/A | N/A |
| â ââHashJoin_44 | 391944.14 | 184087 | mpp[tiflash] | | tiflash_task:{time:154.7ms, loops:23, threads:8} | inner join, equal:[eq(test.customer.c_custkey, test.orders.o_custkey)] | N/A | N/A |
| â ââExchangeReceiver_48(Build) | 30317.61 | 30142 | mpp[tiflash] | | tiflash_task:{time:70.7ms, loops:2, threads:8} | | N/A | N/A |
| â â ââExchangeSender_47 | 30317.61 | 30142 | mpp[tiflash] | | tiflash_task:{time:39.8ms, loops:3, threads:8} | ExchangeType: Broadcast, Compression: FAST | N/A | N/A |
| â â ââTableFullScan_45 | 30317.61 | 30142 | mpp[tiflash] | table:customer | tiflash_task:{time:31.8ms, loops:3, threads:8}, tiflash_scan:{dtfile:{total_scanned_packs:38, total_skipped_packs:0, total_scanned_rows:300000, total_skipped_rows:0, total_rs_index_check_time: 0ms, total_read_time: 9ms, total_disagg_read_cache_hit_size: 0, total_disagg_read_cache_miss_size: 0}, total_create_snapshot_time: 0ms, total_local_region_num: 1, total_remote_region_num: 0, total_learner_read_time: 2ms} | pushed down filter:eq(test.customer.c_mktsegment, "BUILDING"), keep order:false | N/A | N/A |
| â ââSelection_50(Probe) | 1135130.91 | 909968 | mpp[tiflash] | | tiflash_task:{time:134.7ms, loops:23, threads:8} | lt(test.orders.o_orderdate, 1996-01-01) | N/A | N/A |
| â ââTableFullScan_49 | 1504096.00 | 1500000 | mpp[tiflash] | table:orders | tiflash_task:{time:126.7ms, loops:23, threads:8}, tiflash_scan:{dtfile:{total_scanned_packs:185, total_skipped_packs:0, total_scanned_rows:1500000, total_skipped_rows:0, total_rs_index_check_time: 0ms, total_read_time: 126ms, total_disagg_read_cache_hit_size: 0, total_disagg_read_cache_miss_size: 0}, total_create_snapshot_time: 0ms, total_local_region_num: 3, total_remote_region_num: 0, total_learner_read_time: 1ms} | pushed down filter:empty, keep order:false | N/A | N/A |
| ââExchangeReceiver_56(Probe) | 2718161.32 | 2432047 | mpp[tiflash] | | tiflash_task:{time:228.9ms, loops:92, threads:8} | | N/A | N/A |
| ââExchangeSender_55 | 2718161.32 | 2432047 | mpp[tiflash] | | tiflash_task:{time:256ms, loops:97, threads:8} | ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.lineitem.l_orderkey, collate: binary] | N/A | N/A |
| ââTableFullScan_53 | 2718161.32 | 2432047 | mpp[tiflash] | table:lineitem | tiflash_task:{time:124ms, loops:97, threads:8}, tiflash_scan:{dtfile:{total_scanned_packs:1490, total_skipped_packs:0, total_scanned_rows:12002430, total_skipped_rows:0, total_rs_index_check_time: 0ms, total_read_time: 611ms, total_disagg_read_cache_hit_size: 0, total_disagg_read_cache_miss_size: 0}, total_create_snapshot_time: 0ms, total_local_region_num: 13, total_remote_region_num: 0, total_learner_read_time: 2ms} | pushed down filter:gt(test.lineitem.l_shipdate, 1996-02-01), keep order:false | N/A | N/A |
+
23 rows in set (0.3486 sec)
ãexecution infoãã®æ¬ãèŠããšãè¡ããŒã¹ã®ã¹ãã¬ãŒãžãšã³ãžã³ã ã£ãæã¯tikv_task
ãšæžãããŠãããã®ãtiflash_task
ã«
ãªã£ãŠããŸãã
ãŸããçµæã«ExchangeSender
ãExchangeReceiver
ãå«ãŸããŠããå ŽåãMPPã¢ãŒããæå¹ã«ãªã£ãŠããããšã瀺ããŠããããã§ãã
ãtaskãã®å€ãã¯ãmpp[tiflash]ãã«ãªã£ãŠããŸããããMppVersion: 2, data:ExchangeSender_138 ããšæžãããŠããçµæããããŸãããã
| ââTableReader_139 | 10.00 | 40 | root | | time:271.1ms, loops:3, cop_task: {num: 5, max: 0s, min: 0s, avg: 0s, p95: 0s, copr_cache_hit_ratio: 0.00} | MppVersion: 2, data:ExchangeSender_138 | 1.32 KB | N/A |
ããã§QuickStartã®å
容ã¯ç¢ºèªã§ããŸããã
ã¡ãªã¿ã«ã匷å¶çã«TiKVãéžæããããå Žåã¯ãã³ãå¥ã§read_from_storage
ã§ã¹ãã¬ãŒãžãšã³ãžã³ãæå®ããããã§ãã
explain analyze SELECT
l_orderkey,
SUM(
l_extendedprice * (1 - l_discount)
) AS revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '1996-01-01'
AND l_shipdate > DATE '1996-02-01'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate
limit 10;
ããã§ãTiKVãéžæããããã«ãªããŸããã
+
| id | estRows | actRows | task | access object | execution info | operator info | memory | disk |
+
| Projection_14 | 10.00 | 10 | root | | time:3.03s, loops:2, RU:9837.350827, Concurrency:OFF | test.lineitem.l_orderkey, Column#34, test.orders.o_orderdate, test.orders.o_shippriority | 2.52 KB | N/A |
| ââTopN_17 | 10.00 | 10 | root | | time:3.03s, loops:2 | Column#34:desc, test.orders.o_orderdate, offset:0, count:10 | 76.8 KB | N/A |
| ââHashAgg_24 | 674032.16 | 7664 | root | | time:3.03s, loops:11, partial_worker:{wall_time:3.030973074s, concurrency:5, task_num:17, tot_wait:15.139139758s, tot_exec:12.139184ms, tot_time:15.152985423s, max:3.030928905s, p95:3.030928905s}, final_worker:{wall_time:3.034161772s, concurrency:5, task_num:25, tot_wait:15.152203914s, tot_exec:16.297955ms, tot_time:15.168511981s, max:3.034063683s, p95:3.034063683s} | group by:Column#39, Column#40, Column#41, funcs:sum(Column#35)->Column#34, funcs:firstrow(Column#36)->test.orders.o_orderdate, funcs:firstrow(Column#37)->test.orders.o_shippriority, funcs:firstrow(Column#38)->test.lineitem.l_orderkey | 4.78 MB | N/A |
| ââProjection_88 | 1580588.37 | 16655 | root | | time:3.03s, loops:18, Concurrency:5 | mul(test.lineitem.l_extendedprice, minus(1, test.lineitem.l_discount))->Column#35, test.orders.o_orderdate->Column#36, test.orders.o_shippriority->Column#37, test.lineitem.l_orderkey->Column#38, test.lineitem.l_orderkey->Column#39, test.orders.o_orderdate->Column#40, test.orders.o_shippriority->Column#41 | 592.9 KB | N/A |
| ââIndexJoin_37 | 1580588.37 | 16655 | root | | time:3.03s, loops:18, inner:{total:3.65s, concurrency:5, task:15, construct:183.1ms, fetch:3.46s, build:4.8ms}, probe:31ms | inner join, inner:TableReader_33, outer key:test.orders.o_orderkey, inner key:test.lineitem.l_orderkey, equal cond:eq(test.orders.o_orderkey, test.lineitem.l_orderkey) | 10.9 MB | N/A |
| ââHashJoin_74(Build) | 391944.14 | 184087 | root | | time:2.57s, loops:185, build_hash_table:{total:219.6ms, fetch:207.5ms, build:12.1ms}, probe:{concurrency:5, total:12.8s, max:2.57s, probe:455ms, fetch:12.4s} | inner join, equal:[eq(test.customer.c_custkey, test.orders.o_custkey)] | 2.93 MB | 0 Bytes |
| â ââTableReader_80(Build) | 30317.61 | 30142 | root | | time:211.9ms, loops:31, cop_task: {num: 8, max: 66.1ms, min: 3.63ms, avg: 26.9ms, p95: 66.1ms, max_proc_keys: 63184, p95_proc_keys: 63184, tot_proc: 207.3ms, tot_wait: 641µs, rpc_num: 8, rpc_time: 214.9ms, copr_cache_hit_ratio: 0.00, build_task_duration: 9.78µs, max_distsql_concurrency: 1} | data:Selection_79 | 497.7 KB | N/A |
| â â ââSelection_79 | 30317.61 | 30142 | cop[tikv] | | tikv_task:{proc max:64ms, min:0s, avg: 24.5ms, p80:64ms, p95:64ms, iters:179, tasks:8}, scan_detail: {total_process_keys: 150000, total_process_keys_size: 30533765, total_keys: 150008, get_snapshot_time: 320.3µs, rocksdb: {key_skipped_count: 150000, block: {cache_hit_count: 1030}}} | eq(test.customer.c_mktsegment, "BUILDING") | N/A | N/A |
| â â ââTableFullScan_78 | 150000.00 | 150000 | cop[tikv] | table:customer | tikv_task:{proc max:64ms, min:0s, avg: 22ms, p80:52ms, p95:64ms, iters:179, tasks:8} | keep order:false | N/A | N/A |
| â ââTableReader_77(Probe) | 1135130.91 | 909968 | root | | time:2.25s, loops:887, cop_task: {num: 42, max: 383.2ms, min: 1.76ms, avg: 133.3ms, p95: 365.9ms, max_proc_keys: 82912, p95_proc_keys: 82912, tot_proc: 5.39s, tot_wait: 5.95ms, rpc_num: 42, rpc_time: 5.6s, copr_cache_hit_ratio: 0.00, build_task_duration: 9.6µs, max_distsql_concurrency: 3} | data:Selection_76 | 3.08 MB | N/A |
| â ââSelection_76 | 1135130.91 | 909968 | cop[tikv] | | tikv_task:{proc max:368ms, min:0s, avg: 128.6ms, p80:336ms, p95:356ms, iters:1630, tasks:42}, scan_detail: {total_process_keys: 1500000, total_process_keys_size: 227213890, total_keys: 1500042, get_snapshot_time: 1.2ms, rocksdb: {key_skipped_count: 1500000, block: {cache_hit_count: 7492}}} | lt(test.orders.o_orderdate, 1996-01-01) | N/A | N/A |
| â ââTableFullScan_75 | 1504096.00 | 1500000 | cop[tikv] | table:orders | tikv_task:{proc max:368ms, min:0s, avg: 127ms, p80:332ms, p95:352ms, iters:1630, tasks:42} | keep order:false | N/A | N/A |
| ââTableReader_33(Probe) | 175459.49 | 16655 | root | | time:3.25s, loops:42, cop_task: {num: 103, max: 257ms, min: 2.32ms, avg: 72.6ms, p95: 168.7ms, max_proc_keys: 25568, p95_proc_keys: 17730, tot_proc: 5.35s, tot_wait: 33.2ms, rpc_num: 103, rpc_time: 7.48s, copr_cache_hit_ratio: 0.00, build_task_duration: 6.03ms, max_distsql_concurrency: 6} | data:Selection_32 | N/A | N/A |
| ââSelection_32 | 175459.49 | 16655 | cop[tikv] | | tikv_task:{proc max:240ms, min:0s, avg: 64.7ms, p80:96ms, p95:160ms, iters:1151, tasks:103}, scan_detail: {total_process_keys: 736133, total_process_keys_size: 143113751, total_keys: 920269, get_snapshot_time: 8.34ms, rocksdb: {key_skipped_count: 736133, block: {cache_hit_count: 716899}}} | gt(test.lineitem.l_shipdate, 1996-02-01) | N/A | N/A |
| ââTableRangeScan_31 | 391944.14 | 736133 | cop[tikv] | table:lineitem | tikv_task:{proc max:236ms, min:0s, avg: 64.3ms, p80:96ms, p95:160ms, iters:1151, tasks:103} | range: decided by [eq(test.lineitem.l_orderkey, test.orders.o_orderkey)], keep order:false | N/A | N/A |
+
15 rows in set (3.0684 sec)
Use TiDB to Read TiFlash Replicas | PingCAP Docs
éåžžã¯ãã¹ãã¬ãŒãžãšã³ãžã³ã®éžæã¯ãªããã£ãã€ã¶ãŒãã³ã¹ãèŠç©ããã«åºã¥ããŠè¡ãããã§ãã
ãšããã§ãTiFlashã«ã¬ããªã±ãŒã·ã§ã³ããããšã§ããŒã¿éãå¢ããŠãããšæãã®ã§ããã以äžã®ã¯ãšãªãŒãå®è¡ããŠã
SELECT
CONCAT(table_schema,'.',table_name) AS 'Table Name',
table_rows AS 'Number of Rows',
FORMAT_BYTES(data_length) AS 'Data Size',
FORMAT_BYTES(index_length) AS 'Index Size',
FORMAT_BYTES(data_length+index_length) AS'Total'
FROM
information_schema.TABLES
WHERE
table_schema='test';
ããŒã¿ãµã€ãºã¯å€ãã£ããããã¯ãããŸããã§ããã
+
| Table Name | Number of Rows | Data Size | Index Size | Total |
+
| test.nation | 25 | 2.44 KiB | 0 bytes | 2.44 KiB |
| test.region | 5 | 416 bytes | 0 bytes | 416 bytes |
| test.part | 215360 | 25.76 MiB | 0 bytes | 25.76 MiB |
| test.supplier | 10000 | 1.41 MiB | 0 bytes | 1.41 MiB |
| test.partsupp | 836864 | 124.93 MiB | 12.77 MiB | 137.70 MiB |
| test.customer | 150000 | 24.06 MiB | 0 bytes | 24.06 MiB |
| test.orders | 1504096 | 166.63 MiB | 0 bytes | 166.63 MiB |
| test.lineitem | 6071871 | 774.65 MiB | 92.65 MiB | 867.30 MiB |
+
8 rows in set (0.0139 sec)
TiFlash蟌ã¿ã®ããŒã¿éãèŠããå Žåã«ã¯ãã©ãããããããã§ããããïŒ
ãã¡ãã®ããŒãã«ãèŠããšãããããªæ°ãããŸãã
https://docs.pingcap.com/ja/tidb/v7.5/information-schema-tiflash-tables
ãããªã¯ãšãªãŒãäœæã
select
tidb_database,
tidb_table,
total_rows,
format_bytes(total_size) total_size
from
information_schema.tiflash_tables
where
tidb_database = 'test';
çµæã
+
| tidb_database | tidb_table | total_rows | total_size |
+
| test | customer | 150000 | 32.27 MiB |
| test | orders | 1500000 | 237.34 MiB |
| test | lineitem | 6001215 | 1.19 GiB |
+
3 rows in set (0.0152 sec)
TiKVãããããŒã¿ã倧ãããªãããã§ããâŠã
ãããã«
TiDBã®HTAPã«é¢ããQuickStartãè©ŠããŠã¿ãŸããã
ããããHTAPãšããèãæ¹ãç¥ããªãã£ããããã®ã§ãå匷ã«ãªããŸããããTiDBã§è©Šããã®ãè¯ãã£ãã§ããã
次ã¯æ§æèŠçŽ ãªã©ã«ã€ããŠæžãããããã¥ã¡ã³ããèŠãŠãã£ããããããªãšæããŸãã