數據庫概念
時序數據庫 TDengine 中數據庫概念,等同于關系型數據庫 MYSQL PostgreSQL 中的數據庫,都是對資源進行分割管理的單位。
TDengine 數據庫與關系型數據庫最大區別是跨庫操作,TDengine 數據庫跨庫操作除了少量幾個SQL 能支持外,其它幾乎不支持,所以在前期數據建模時要注意這點,盡可能的把橫向有關聯的設備規劃到一個數據庫中方便關聯查詢。
下面介紹對數據庫的主要操作 SQL 語句:
創建數據庫
CREATE DATABASE [IF NOT EXISTS] db_name [database_options]database_options:database_option ...database_option: {VGROUPS value| PRECISION {'ms' | 'us' | 'ns'}| REPLICA value| BUFFER value| PAGES value| PAGESIZE value| CACHEMODEL {'none' | 'last_row' | 'last_value' | 'both'}| CACHESIZE value| COMP {0 | 1 | 2}| DURATION value| MAXROWS value| MINROWS value| KEEP value| KEEP_TIME_OFFSET value| STT_TRIGGER value| SINGLE_STABLE {0 | 1}| TABLE_PREFIX value| TABLE_SUFFIX value| DNODES value| TSDB_PAGESIZE value| WAL_LEVEL {1 | 2}| WAL_FSYNC_PERIOD value| WAL_RETENTION_PERIOD value| WAL_RETENTION_SIZE value| COMPACT_INTERVAL value| COMPACT_TIME_RANGE value| COMPACT_TIME_OFFSET value
}
參數說明
-
VGROUPS:數據庫中初始 vgroup 的數目。
-
PRECISION:數據庫的時間戳精度。ms 表示毫秒,us 表示微秒,ns 表示納秒,默認 ms 毫秒。
-
REPLICA:表示數據庫副本數,取值為 1、2 或 3,默認為 1; 2 僅在企業版 3.3.0.0 及以后版本中可用。在集群中使用,副本數必須小于或等于 DNODE 的數目。且使用時存在以下限制:
- 暫不支持對雙副本數據庫相關 Vgroup 進行 SPLITE VGROUP 或 REDISTRIBUTE VGROUP 操作
- 單副本數據庫可變更為雙副本數據庫,但不支持從雙副本變更為其它副本數,也不支持從三副本變更為雙副本
-
BUFFER: 一個 VNODE 寫入內存池大小,單位為 MB,默認為 256,最小為 3,最大為 16384。
-
PAGES:一個 VNODE 中元數據存儲引擎的緩存頁個數,默認為 256,最小 64。一個 VNODE 元數據存儲占用 PAGESIZE * PAGES,默認情況下為 1MB 內存。
-
PAGESIZE:一個 VNODE 中元數據存儲引擎的頁大小,單位為 KB,默認為 4 KB。范圍為 1 到 16384,即 1 KB 到 16 MB。
-
CACHEMODEL:表示是否在內存中緩存子表的最近數據。默認為 none。
- none:表示不緩存。
- last_row:表示緩存子表最近一行數據。這將顯著改善 LAST_ROW 函數的性能表現。
- last_value:表示緩存子表每一列的最近的非 NULL 值。這將顯著改善無特殊影響(WHERE、ORDER BY、GROUP BY、INTERVAL)下的 LAST 函數的性能表現。
- both:表示同時打開緩存最近行和列功能。
Note:CacheModel 值來回切換有可能導致 last/last_row 的查詢結果不準確,請謹慎操作。推薦保持打開。
-
CACHESIZE:表示每個 vnode 中用于緩存子表最近數據的內存大小。默認為 1 ,范圍是[1, 65536],單位是 MB。
-
COMP:表示數據庫文件壓縮標志位,缺省值為 2,取值范圍為 [0, 2]。
- 0:表示不壓縮。
- 1:表示一階段壓縮。
- 2:表示兩階段壓縮。
-
DURATION:數據文件存儲數據的時間跨度。可以使用加單位的表示形式,如 DURATION 100h、DURATION 10d 等,支持 m(分鐘)、h(小時)和 d(天)三個單位。不加時間單位時默認單位為天,如 DURATION 50 表示 50 天。
-
MAXROWS:文件塊中記錄的最大條數,默認為 4096 條。
-
MINROWS:文件塊中記錄的最小條數,默認為 100 條。
-
KEEP:表示數據文件保存的天數,缺省值為 3650,取值范圍 [1, 365000],且必須大于或等于 3 倍的 DURATION 參數值。數據庫會自動刪除保存時間超過 KEEP 值的數據從而釋放存儲空間。KEEP 可以使用加單位的表示形式,如 KEEP 100h、KEEP 10d 等,支持 m(分鐘)、h(小時)和 d(天)三個單位。也可以不寫單位,如 KEEP 50,此時默認單位為天。企業版支持多級存儲功能, 因此, 可以設置多個保存時間(多個以英文逗號分隔,最多 3 個,滿足 keep 0 <= keep 1 <= keep 2,如 KEEP 100h,100d,3650d); 社區版不支持多級存儲功能(即使配置了多個保存時間, 也不會生效, KEEP 會取最大的保存時間)。了解更多,請點擊 關于主鍵時間戳
-
KEEP_TIME_OFFSET:自 3.2.0.0 版本生效。刪除或遷移保存時間超過 KEEP 值的數據的延遲執行時間,默認值為 0 (小時)。在數據文件保存時間超過 KEEP 后,刪除或遷移操作不會立即執行,而會額外等待本參數指定的時間間隔,以實現與業務高峰期錯開的目的。
-
STT_TRIGGER:表示落盤文件觸發文件合并的個數。對于少表高頻寫入場景,此參數建議使用默認配置;而對于多表低頻寫入場景,此參數建議配置較大的值。
-
SINGLE_STABLE:表示此數據庫中是否只可以創建一個超級表,用于超級表列非常多的情況。
- 0:表示可以創建多張超級表。
- 1:表示只可以創建一張超級表。
-
TABLE_PREFIX:當其為正值時,在決定把一個表分配到哪個 vgroup 時要忽略表名中指定長度的前綴;當其為負值時,在決定把一個表分配到哪個 vgroup 時只使用表名中指定長度的前綴;例如,假定表名為 “v30001”,當 TSDB_PREFIX = 2 時 使用 “0001” 來決定分配到哪個 vgroup ,當 TSDB_PREFIX = -2 時使用 “v3” 來決定分配到哪個 vgroup
-
TABLE_SUFFIX:當其為正值時,在決定把一個表分配到哪個 vgroup 時要忽略表名中指定長度的后綴;當其為負值時,在決定把一個表分配到哪個 vgroup 時只使用表名中指定長度的后綴;例如,假定表名為 “v30001”,當 TSDB_SUFFIX = 2 時 使用 “v300” 來決定分配到哪個 vgroup ,當 TSDB_SUFFIX = -2 時使用 “01” 來決定分配到哪個 vgroup。
-
TSDB_PAGESIZE:一個 VNODE 中時序數據存儲引擎的頁大小,單位為 KB,默認為 4 KB。范圍為 1 到 16384,即 1 KB到 16 MB。
-
DNODES:指定 VNODE 所在的 DNODE 列表,如 ‘1,2,3’,以逗號區分且字符間不能有空格,僅企業版支持。
-
WAL_LEVEL:WAL 級別,默認為 1。
- 1:寫 WAL,但不執行 fsync。
- 2:寫 WAL,而且執行 fsync。
-
WAL_FSYNC_PERIOD:當 WAL_LEVEL 參數設置為 2 時,用于設置落盤的周期。默認為 3000,單位毫秒。最小為 0,表示每次寫入立即落盤;最大為 180000,即三分鐘。
-
WAL_RETENTION_PERIOD: 為了數據訂閱消費,需要 WAL 日志文件額外保留的最大時長策略。WAL 日志清理,不受訂閱客戶端消費狀態影響。單位為 s。默認為 3600,表示在 WAL 保留最近 3600 秒的數據,請根據數據訂閱的需要修改這個參數為適當值。
-
WAL_RETENTION_SIZE:為了數據訂閱消費,需要 WAL 日志文件額外保留的最大累計大小策略。單位為 KB。默認為 0,表示累計大小無上限。
-
COMPACT_INTERVAL:自動 compact 觸發周期(從 1970-01-01T00:00:00Z 開始切分的時間周期)。取值范圍:0 或 [10m, keep2],單位:m(分鐘),h(小時),d(天)。不加時間單位默認單位為天,默認值為 0,即不觸發自動 compact 功能。如果 db 中有未完成的 compact 任務,不重復下發 compact 任務。僅企業版 3.3.5.0 版本開始支持。
-
COMPACT_TIME_RANGE:自動 compact 任務觸發的 compact 時間范圍,取值范圍:[-keep2, -duration],單位:m(分鐘),h(小時),d(天)。不加時間單位時默認單位為天,默認值為 [0, 0]。取默認值 [0, 0] 時,如果 COMPACT_INTERVAL 大于 0,會按照 [-keep2, -duration] 下發自動 compact。因此,要關閉自動 compact 功能,需要將 COMPACT_INTERVAL 設置為 0。僅企業版 3.3.5.0 版本開始支持。
-
COMPACT_TIME_OFFSET:自動 compact 任務觸發的 compact 時間相對本地時間的偏移量。取值范圍:[0,23],單位: h(小時),默認值為 0。以 UTC 0 時區為例,如果 COMPACT_INTERVAL 為 1d,當 COMPACT_TIME_OFFSET 為 0 時,在每天 0 點下發自動 compact,如果 COMPACT_TIME_OFFSET 為 2,在每天 2 點下發自動 compact。僅企業版 3.3.5.0 版本開始支持。
創建數據庫示例
create database if not exists db vgroups 10 buffer 10
以上示例創建了一個有 10 個 vgroup 名為 db 的數據庫, 其中每個 vnode 分配 10MB 的寫入緩存
使用數據庫
USE db_name;
使用/切換數據庫(在 REST 連接方式下無效)。
刪除數據庫
DROP DATABASE [IF EXISTS] db_name
刪除數據庫。指定 Database 所包含的全部數據表將被刪除,該數據庫的所有 vgroups 也會被全部銷毀,請謹慎使用!
修改數據庫參數
ALTER DATABASE db_name [alter_database_options]alter_database_options:alter_database_option ...alter_database_option: {CACHEMODEL {'none' | 'last_row' | 'last_value' | 'both'}| CACHESIZE value| BUFFER value| PAGES value| REPLICA value| STT_TRIGGER value| WAL_LEVEL value| WAL_FSYNC_PERIOD value| KEEP value| WAL_RETENTION_PERIOD value| WAL_RETENTION_SIZE value| MINROWS value| COMPACT_INTERVAL value| COMPACT_TIME_RANGE value| COMPACT_TIME_OFFSET value
}
修改 CACHESIZE
修改數據庫參數的命令使用簡單,難的是如何確定是否需要修改以及如何修改。本小節描述如何判斷數據庫的 cachesize 是否夠用。
- 如何查看 cachesize?
通過 select * from information_schema.ins_databases; 可以查看這些 cachesize 的具體值(單位為 MB)。。
- 如何查看 cacheload?
通過 show <db_name>.vgroups; 可以查看 cacheload(單位為字節)。
- 判斷 cachesize 是否夠用
如果 cacheload 非常接近 cachesize,則 cachesize 可能過小。 如果 cacheload 明顯小于 cachesize 則 cachesize 是夠用的。可以根據這個原則判斷是否需要修改 cachesize 。具體修改值可以根據系統可用內存情況來決定是加倍或者是提高幾倍。
:::note
其它參數在 3.0.0.0 中暫不支持修改
:::
查看數據庫
查看系統中的所有數據庫
SHOW DATABASES;
顯示一個數據庫的創建語句
SHOW CREATE DATABASE db_name \G;
常用于數據庫遷移。對一個已經存在的數據庫,返回其創建語句;在另一個集群中執行該語句,就能得到一個設置完全相同的 Database。
查看數據庫參數
SELECT * FROM INFORMATION_SCHEMA.INS_DATABASES WHERE NAME='db_name' \G;
會列出指定數據庫的配置參數,并且每行只顯示一個參數。
刪除過期數據
TRIM DATABASE db_name;
刪除過期數據,并根據多級存儲的配置歸整數據。
落盤內存數據
FLUSH DATABASE db_name;
落盤內存中的數據。在關閉節點之前,執行這條命令可以避免重啟后的預寫數據日志回放,加速啟動過程。
調整 VGROUP 中 VNODE 的分布
REDISTRIBUTE VGROUP vgroup_no DNODE dnode_id1 [DNODE dnode_id2] [DNODE dnode_id3]
按照給定的 dnode 列表,調整 vgroup 中的 vnode 分布。因為副本數目最大為 3,所以最多輸入 3 個 dnode。
自動調整 VGROUP 中 LEADER 的分布
BALANCE VGROUP LEADER
觸發集群所有 vgroup 中的 leader 重新選主,對集群各節點進行負載再均衡操作。(企業版功能)
查看數據庫工作狀態
SHOW db_name.ALIVE;
查詢數據庫 db_name 的可用狀態,返回值 0:不可用 1:完全可用 2:部分可用(即數據庫包含的 VNODE 部分節點可用,部分節點不可用)
查看 DB 的磁盤空間占用
select * from INFORMATION_SCHEMA.INS_DISK_USAGE where db_name = 'db_name'
查看DB各個模塊所占用磁盤的大小
SHOW db_name.disk_info;
查看數據庫 db_name 的數據壓縮壓縮率和數據在磁盤上所占用的大小
該命令本質上等同于:
select sum(data1 + data2 + data3)/sum(raw_data), sum(data1 + data2 + data3) from information_schema.ins_disk_usage where db_name="dbname"
訪問官網
更多內容歡迎訪問 TDengine 官網