supportVnodes我根据文档设置为最大值4096,CACHEMODEL 创库没有指定,看了下使用的是默认值:none
报错信息如下:
01/06 15:14:08.459117 00000089 VND ERROR vgId:1122, failed to open vnode query since Out of Memory
01/06 15:14:08.463555 00000089 DND ERROR vgId:1122, failed to open vnode since Out of Memory
01/06 15:14:08.463570 00000089 VND path:vnode/vnode1122 is removed while destroy vnode
01/06 15:14:08.463575 00000089 UTL tfs remove dir:/var/lib/taos aname:/var/lib/taos/vnode/vnode1122 rname:[vnode/vnode1122]
01/06 15:14:08.464149 00000089 DND ERROR msg:0x76ad981db278, failed to process since Out of Memory, type:create-vnode, gtid:0x0:0x71ed39227ea0ef04
01/06 15:14:08.464222 00000089 DND vgId:1127, vnode management handle msgType:create-vnode, start to create vnode, page:256 pageSize:4 buffer:8 szPage:4096 szBuf:8388608, cacheLast:0 cacheLastSize:1 sstTrigger:1 tsdbPageSize:4 4096 dbname:1.ccc dbId:5560384582142159504, days:14400 keep0:51840 keep1:51840 keep2:51840 keepTimeOffset0 tsma:0 precision:0 compression:2 minRows:100 maxRows:4096, wal fsync:3000 level:1 retentionPeriod:3600 retentionSize:0 rollPeriod:0 segSize:0, hash method:1 begin:2147483647 end:4294967295 prefix:0 surfix:0 replica:1 selfIndex:0 learnerReplica:0 learnerSelfIndex:-1 strict:1 changeVersion:1
01/06 15:14:08.464231 00000089 DND vgId:1127, replica:0 ep:td1:6030 dnode:1
01/06 15:14:08.464983 00000086 MND trans:567, redoAction:0 response is received, code:0x80000102, accept:0x80000521 retry:0x0
01/06 15:14:08.465016 00000086 MND trans:567, continue to execute, stage:redoAction createTime:1767670197752 topHalf:1
01/06 15:14:08.465033 00000086 MND ERROR trans:567, all 2 actions executed, code:0x102
01/06 15:14:08.465037 00000086 MND trans:567, redoAction:0 execute status is reset
01/06 15:14:08.465040 00000086 MND ERROR failed to execute redoActions since:Out of Memory, code:0x80000102
01/06 15:14:08.465048 00000086 MND ERROR trans:567, stage keep on redoAction since Out of Memory, failedTimes:250
01/06 15:14:08.465050 00000086 MND trans:567, send rsp, stage:redoAction failedTimes:250 code:0x80000102
01/06 15:14:08.465544 00000089 DND vgId:1127, alloc disk:0 of level 0. ndisk:1, vnodes: 1121
01/06 15:14:08.465629 00000089 VND vgId:1127, save config while create
01/06 15:14:08.472161 00000089 VND vgId:1127, vnode info is saved, fname:/var/lib/taos/vnode/vnode1127/vnode_tmp.json replica:1 selfIndex:0 changeVersion:1
01/06 15:14:08.472245 00000089 VND vnode info is committed, dir:/var/lib/taos/vnode/vnode1127
01/06 15:14:08.472253 00000089 VND vgId:1127, vnode is created
01/06 15:14:08.541347 00000089 MTA vgId:1127, ttl mgr open end, hash size: 0, time consumed: 5676847 ns
01/06 15:14:08.573922 00000089 TSD vgId:1127 open_fs success
01/06 15:14:08.573952 00000089 TSD vgId:1127 tsdbOpenFS success
01/06 15:14:08.608486 00000089 WAL vgId:1127, reset commitVer to -1
下面这个是批量创建库的shell脚本,你们可以试一下
#!/bin/bash
# TDengine 批量创建数据库脚本
# 使用方法: ./create_td_dbs.sh <数据库数量>
# 配置参数
SERVER_IP="192.168.10.26"
PORT="46041"
BASE_URL="http://${SERVER_IP}:${PORT}/rest/sql"
USERNAME="root"
PASSWORD="taosdata"
PREFIX="c"
# 检查参数
if [ $# -eq 0 ]; then
echo "错误:请指定要创建的数据库数量"
echo "使用方法: $0 <数据库数量>"
echo "示例: $0 10"
exit 1
fi
COUNT=$1
# 验证输入是否为数字
if ! [[ "$COUNT" =~ ^[0-9]+$ ]]; then
echo "错误:数据库数量必须是整数"
exit 1
fi
if [ "$COUNT" -le 0 ]; then
echo "错误:数据库数量必须大于0"
exit 1
fi
echo "开始为 TDengine 创建数据库..."
echo "服务器: ${SERVER_IP}:${PORT}"
echo "数据库数量: ${COUNT}"
echo ""
# 生成 Basic Auth 认证头
AUTH_HEADER="Authorization: Basic $(echo -n "${USERNAME}:${PASSWORD}" | base64)"
# 测试连接
echo "正在测试数据库连接..."
TEST_RESPONSE=$(curl -s -X POST "${BASE_URL}" \
-H "${AUTH_HEADER}" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "SELECT 1" 2>/dev/null)
# 检查响应中的 code 字段(新的API格式)
if echo "$TEST_RESPONSE" | grep -q '"code":0'; then
echo "连接测试成功!"
else
echo "错误:无法连接到 TDengine 服务器!"
echo "响应: $TEST_RESPONSE"
exit 1
fi
echo ""
# 创建数据库
SUCCESS_COUNT=0
FAILED_COUNT=0
for ((i=1; i<=COUNT; i++)); do
DB_NAME="${PREFIX}${i}"
SQL="CREATE DATABASE IF NOT EXISTS ${DB_NAME} KEEP 36 vgroups 2 BUFFER 16"
echo -n "创建数据库: ${DB_NAME} ... "
# 发送 HTTP 请求
RESPONSE=$(curl -s -X POST "${BASE_URL}" \
-H "${AUTH_HEADER}" \
-H "Content-Type: application/x-www-form-urlencoded" \
-w " HTTP_STATUS:%{http_code}" \
-d "${SQL}" 2>/dev/null)
# 提取 HTTP 状态码
HTTP_STATUS=$(echo "$RESPONSE" | tr -d '\n' | sed -e 's/.*HTTP_STATUS://')
RESPONSE_BODY=$(echo "$RESPONSE" | sed -e 's/HTTP_STATUS:.*//')
# 检查响应
if [ "$HTTP_STATUS" = "200" ] && echo "$RESPONSE_BODY" | grep -q '"code":0'; then
echo "✓ 成功"
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
else
# 尝试从响应中提取错误信息
ERROR_MSG=$(echo "$RESPONSE_BODY" | grep -o '"message":"[^"]*"' | sed 's/"message":"//' | sed 's/"$//')
if [ -z "$ERROR_MSG" ]; then
ERROR_MSG=$(echo "$RESPONSE_BODY" | grep -o '"desc":"[^"]*"' | sed 's/"desc":"//' | sed 's/"$//')
fi
if [ -z "$ERROR_MSG" ]; then
ERROR_MSG="HTTP状态码: $HTTP_STATUS"
fi
echo "✗ 失败: ${ERROR_MSG}"
FAILED_COUNT=$((FAILED_COUNT + 1))
fi
# 可选:添加短暂延迟避免请求过快
sleep 0.1
done
# 输出结果汇总
echo ""
echo "=================================================="
echo "创建完成!"
echo "成功: ${SUCCESS_COUNT} 个"
echo "失败: ${FAILED_COUNT} 个"
echo "=================================================="
if [ "$FAILED_COUNT" -eq 0 ]; then
exit 0
else
exit 1
fi