TiDB实践—索引加速+分布式执行框架创建索引提升70+倍

作者: 数据源的TiDB学习之路 原文来源: https://tidb.net/blog/92d348c2

背景介绍

TiDB 采用在线异步变更的方式执行 DDL 语句,从而实现 DDL 语句的执行不会阻塞其他会话中的 DML 语句。按照是否需要操作 DDL 目标对象所包括的数据来划分,DDL 语句可以划分为 逻辑 DDL 语句 和 **物理 DDL 语句。**逻辑 DDL 语句通常只修改数据库对象的元数据,不对变更对象存储的数据进行处理,例如变更表名或变更列名。物理 DDL 语句不但会修改变更对象的元数据,同时也修改变更对象所存储的用户数据,例如,为表创建索引,不仅需要变更表的定义,同时也需要做一次全表扫描以构建新增加的索引。

在 TiDB 中,物理 DDL 被称为 Reorg DDL(Reorg 即 Reorganization)。目前物理 DDL 只包含 ADD INDEX 以及有损列类型变更(例如从 INT 转成 CHAR 类型)这两种类型。物理 DDL 的特点是执行时间较长,且执行时间与表的数据量、机器配置以及业务负载有关。

为了优化 TiDB 中物理 DDL 性能,TiDB v6.3.0 支持开启 添加索引加速 功能,提升了创建索引回填过程的速度。从 v7.1.0 开始,TiDB 又引入了 分布式执行框架 ,以进一步发挥分布式架构的资源优势。该框架的目标是对基于该框架的任务进行统一调度与分布式执行,并提供整体和单个任务两个维度的资源管理能力,更好地满足用户对于资源使用的预期。

基于以上信息,使用创建索引为例,在测试环境中验证 TiDB 索引加速及分布式执行框架对物理 DDL 的性能提升情况,供读者参考。

先上结论

  1. 基于 10 亿 表创建索引,采用普通 Online DDL 方式,耗时约 12 小时 21 分钟

  2. 基于 10 亿 表创建索引,采用 Fast DDL 方式,耗时约 30 分钟,比普通 DDL 提升约 24 倍

  3. 基于 10 亿 表创建索引,采用 Fast DDL + 分布式框架

    1. 在 3 个 TiDB Server 时,耗时约 10 分钟,是 Fast DDL 性能的 3 倍,是普通 DDL 的 72 倍
    2. 在 2 个 TiDB Server 时,耗时约 14~15 分钟,是 Fast DDL 性能的 2 倍,是普通 DDL 的 48 倍
    3. 证明采用分布式框架性能基本随着 TiDB Server 个数增长呈准线性增长
创建索引方式 参数设置 平均耗时
普通 Online DDL SET GLOBAL tidb_ddl_enable_fast_reorg = OFF; 12小时21分钟
Fast DDL SET GLOBAL tidb_ddl_enable_fast_reorg = ON; SET GLOBAL tidb_enable_dist_task = OFF; 30 分钟
Fast DDL + 分布式框架 SET GLOBAL tidb_ddl_enable_fast_reorg = ON; SET GLOBAL tidb_enable_dist_task = ON; 10 分钟

参数说明

tidb_ddl_enable_fast_reorg 从 v6.3.0 版本开始引入

  • 作用域:GLOBAL
  • 是否持久化到集群:是
  • 是否受 Hint SET_VAR 控制:否
  • 类型:布尔型
  • 默认值: ON
  • 这个变量用来控制是否开启添加索引加速功能,来提升创建索引回填过程的速度。开启该变量对于数据量较大的表有一定的性能提升。
  • TiDB v7.1.0 引入了快速加索引功能的检查点机制,即使 TiDB owner 因故障重启或者切换,也能够通过自动定期保存的检查点恢复部分进度。
  • 要验证已经完成的 ADD INDEX 操作是否使用了添加索引加速功能,可以执行 ADMIN SHOW DDL JOBS 语句查看 JOB_TYPE 一列中是否含有 ingest 字样。

tidb_enable_dist_task 从 v7.1.0 版本开始引入

  • 作用域:GLOBAL
  • 是否持久化到集群:是
  • 是否受 Hint SET_VAR 控制:否
  • 默认值: ON
  • 这个变量用于控制是否开启 TiDB 分布式执行框架 。开启分布式执行框架后,DDL 和 Import 等将会由集群中多个 TiDB 节点共同完成。
  • 从 TiDB v7.1.0 开始,支持分布式执行分区表的 ADD INDEX
  • 从 TiDB v7.2.0 开始,支持分布式导入任务 IMPORT INTO
  • 从 TiDB v8.1.0 开始,该变量默认开启。如果要从低版本的集群升级到 v8.1.0 或更高版本,且该集群已开启分布式执行框架,为了避免升级期间 ADD INDEX 操作可能导致数据索引不一致的问题,请在升级前关闭分布式执行框架(即将 tidb_enable_dist_task 设置为 OFF ),升级后再手动开启。
  • 该变量由 tidb_ddl_distribute_reorg 改名而来。

tidb_service_scope 从 v7.4.0 版本开始引入

  • 作用域:GLOBAL
  • 是否持久化到集群:否
  • 是否受 Hint SET_VAR 控制:否
  • 类型:字符串
  • 默认值:""
  • 可选值:"" 或 background
  • 该变量是一个实例级别的变量,用于控制 TiDB 分布式执行框架 下各 TiDB 节点的服务范围。当设置 TiDB 节点的 tidb_service_scope background 时,分布式执行框架将调度该节点执行任务(如 ADD INDEX IMPORT INTO )。

环境准备

  • 节点配置(3节点 ARM 机器)
IP 配置 磁盘 基础平台
10.x.x.1 64C 128G 2.5 T ARM
10.x.x.2 64C 128G 2.5 T ARM
10.x.x.3 64C 128G 2.5 T ARM
  • 集群信息(V 7.5.1 版本,混合部署)
[tidb@host-10-x-x-1 ~]$ tiup cluster display tidb-free
tiup is checking updates for component cluster ...
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.14.1/tiup-cluster display tidb-free
Cluster type:       tidb
Cluster name:       tidb-free
Cluster version:    v7.5.1
Deploy user:        tidb
SSH type:           builtin
Dashboard URL:      http://10.x.x.2:2379/dashboard
Grafana URL:        http://10.x.x.1:3000
ID                 Role          Host         Ports        OS/Arch        Status  Data Dir                            Deploy Dir
--                 ----          ----         -----        -------        ------  --------                            ----------
10.x.x.1:9093   alertmanager  10.x.x.1  9093/9094    linux/aarch64  Up      /data1/tidb-data/alertmanager-9093  /data1/tidb-deploy/alertmanager-9093
10.x.x.1:3000   grafana       10.x.x.1  3000         linux/aarch64  Up      -                                   /data1/tidb-deploy/grafana-3000
10.x.x.1:2379   pd            10.x.x.1  2379/2380    linux/aarch64  Up|L    /data1/tidb-data/pd-2379            /data1/tidb-deploy/pd-2379
10.x.x.2:2379   pd            10.x.x.2  2379/2380    linux/aarch64  Up|UI   /data1/tidb-data/pd-2379            /data1/tidb-deploy/pd-2379
10.x.x.3:2379   pd            10.x.x.3  2379/2380    linux/aarch64  Up      /data1/tidb-data/pd-2379            /data1/tidb-deploy/pd-2379
10.x.x.1:9095   prometheus    10.x.x.1  9095/12020   linux/aarch64  Up      /data1/tidb-data/prometheus-9095    /data1/tidb-deploy/prometheus-9095
10.x.x.1:4000   tidb          10.x.x.1  4000/10080   linux/aarch64  Up      -                                   /data1/tidb-deploy/tidb-4000
10.x.x.2:4000   tidb          10.x.x.2  4000/10080   linux/aarch64  Up      -                                   /data1/tidb-deploy/tidb-4000
10.x.x.3:4000   tidb          10.x.x.3  4000/10080   linux/aarch64  Up      -                                   /data1/tidb-deploy/tidb-4000
10.x.x.1:20160  tikv          10.x.x.1  20160/20180  linux/aarch64  Up      /data1/tidb-data/tikv-20160         /data1/tidb-deploy/tikv-20160
10.x.x.2:20160  tikv          10.x.x.2  20160/20180  linux/aarch64  Up      /data1/tidb-data/tikv-20160         /data1/tidb-deploy/tikv-20160
10.x.x.3:20160  tikv          10.x.x.3  20160/20180  linux/aarch64  Up      /data1/tidb-data/tikv-20160         /data1/tidb-deploy/tikv-20160mysql> select version();
+--------------------+
| version()          |
+--------------------+
| 8.0.11-TiDB-v7.5.1 |
+--------------------+
1 row in set (0.00 sec)
  • 参数配置
tiup cluster show-config tidb-test·····server_configs:tidb:temp-dir: /data1/tidb-free-temptikv:storage.block-cache.capacity: 10240MiB·····
  • 数据准备
wget https://github.com/akopytov/sysbench/archive/refs/tags/1.0.20.tar.gz
tar -zxvf 1.0.20.tar.gz
cd sysbench-1.0.20
./autogen.sh
./configure
make && make install[root@vm172-16-201-99 /home/tidb/zcy/sysbench-1.0.20]# sysbench --version
sysbench 1.0.20vi config
mysql-host=172.16.201.159
mysql-port=4099
mysql-user=root
mysql-password=zcy@root
mysql-db=sbtest
time=600
threads=16
report-interval=10
db-driver=mysqlsysbench --config-file=config oltp_point_select --tables=1 --table-size=1000000000 prepare

测试过程

mysql> show create table sbtest1;
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                                                                   |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sbtest1 | CREATE TABLE `sbtest1` (`id` int(11) NOT NULL AUTO_INCREMENT,`k` int(11) NOT NULL DEFAULT '0',`c` char(120) NOT NULL DEFAULT '',`pad` char(60) NOT NULL DEFAULT '',PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=45086776 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)mysql> select count(*) from sbtest1;
+------------+
| count(*)   |
+------------+
| 1000000000 |
+------------+
1 row in set (1 min 30.40 sec)

测试1: Online DDL

SET GLOBAL tidb_ddl_enable_fast_reorg = OFF;
create index k_1 on sbtest1(k);
  • 测试输出:
mysql> admin show ddl jobs;
+--------+---------+-------------------------+---------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+--------+
| JOB_ID | DB_NAME | TABLE_NAME              | JOB_TYPE            | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT  | CREATE_TIME         | START_TIME          | END_TIME            | STATE  |
+--------+---------+-------------------------+---------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+--------+
|    106 | sbtest  | sbtest1                 | add index /* txn */ | public       |       102 |      104 | 1000000000 | 2024-07-16 09:40:36 | 2024-07-16 09:40:36 | 2024-07-16 22:01:38 | synced |
+--------+---------+-------------------------+---------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+--------+
10 rows in set (0.01 sec)
  • 执行耗时:44463 秒 = 12 小时 21 分钟 3 秒
  • 资源截图:

测试2: Fast Online DDL

SET GLOBAL tidb_ddl_enable_fast_reorg = ON;
SET GLOBAL tidb_enable_dist_task = OFF; 
create index k_1 on sbtest1(k);
  • 测试输出:
mysql> admin show ddl jobs;
+--------+---------+---------------------+---------------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+---------------+
| JOB_ID | DB_NAME | TABLE_NAME          | JOB_TYPE                  | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT  | CREATE_TIME         | START_TIME          | END_TIME            | STATE         |
+--------+---------+---------------------+---------------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+---------------+
|    112 | sbtest  | sbtest1             | add index /* ingest */    | public       |       102 |      104 | 1000000000 | 2024-07-16 23:37:42 | 2024-07-16 23:37:42 | 2024-07-17 00:07:52 | synced        |
+--------+---------+---------------------+---------------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+---------------+
10 rows in set (0.01 sec)
  • 执行耗时:1812 秒 = 30 分钟 12 秒
  • 资源截图:

测试3: 分布式执行框架 Fast Online DDL

使用 3 个 TiDB Server 测试

SET GLOBAL tidb_ddl_enable_fast_reorg = ON;
SET GLOBAL tidb_enable_dist_task = ON;--以下可选
TiDB-server-1: SET GLOBAL tidb_service_scope = 'background';
TiDB-server-2: SET GLOBAL tidb_service_scope = 'background';
TiDB-server-3: SET GLOBAL tidb_service_scope = 'background';
等同于
SET GLOBAL tidb_service_scope = '';create index k_1 on sbtest1(k);
  • 测试输出:
mysql> admin show ddl jobs;
+--------+---------+------------+---------------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+---------------+
| JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE                  | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT  | CREATE_TIME         | START_TIME          | END_TIME            | STATE         |
+--------+---------+------------+---------------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+---------------+
|    118 | sbtest  | sbtest1    | add index /* ingest */    | public       |       102 |      104 |  671304000 | 2024-07-17 09:55:09 | 2024-07-17 09:55:09 | 2024-07-17 10:05:25 | synced        |
+--------+---------+------------+---------------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+---------------+
  • 执行耗时:
次数 耗时
第1次 654 秒
第2次 618 秒
第3次 591 秒
第4次 606 秒
第5次 634 秒
平均值 620 秒
  • 资源截图:

使用 2 个 TiDB Server 测试

SET GLOBAL tidb_ddl_enable_fast_reorg = ON;
SET GLOBAL tidb_enable_dist_task = ON;TiDB-server-2: SET GLOBAL tidb_service_scope = 'background';
TiDB-server-3: SET GLOBAL tidb_service_scope = 'background';create index k_1 on sbtest1(k);
  • 测试输出:
mysql> admin show ddl jobs;
+--------+---------+------------+------------------------+--------------+-----------+----------+-----------+---------------------+---------------------+---------------------+--------+
| JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE               | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT | CREATE_TIME         | START_TIME          | END_TIME            | STATE  |
+--------+---------+------------+------------------------+--------------+-----------+----------+-----------+---------------------+---------------------+---------------------+--------+
|    126 | sbtest  | sbtest1    | add index /* ingest */ | public       |       102 |      104 | 868990050 | 2024-07-17 14:16:18 | 2024-07-17 14:16:18 | 2024-07-17 14:30:20 | synced |
  • 执行耗时:
次数 耗时
第一次 843 秒
第二次 879 秒
第三次 876 秒
第四次 816 秒
第五次 903 秒
平均值 863 秒
  • 资源截图:

参考链接

TiDB DDL 执行原理及最佳实践: https://docs.pingcap.com/zh/tidb/stable/ddl-introduction

TiDB 分布式执行框架: https://docs.pingcap.com/zh/tidb/stable/tidb-distributed-execution-framework

问题记录

  1. 使用分布式执行框架创建索引后台JOB中 ROW_COUNT 最终结果不正确
mysql> admin show ddl jobs;
+--------+---------+------------+---------------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+---------------+
| JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE                  | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT  | CREATE_TIME         | START_TIME          | END_TIME            | STATE         |
+--------+---------+------------+---------------------------+--------------+-----------+----------+------------+---------------------+---------------------+---------------------+---------------+
|    118 | sbtest  | sbtest1    | add index /* ingest */    | public       |       102 |      104 |  671304000 | 2024-07-17 09:55:09 | 2024-07-17 09:55:09 | 2024-07-17 10:05:25 | synced        |

分析:

表记录数为 10 亿,索引创建成功后 JOB 对应的 ROW_COUNT 值不正确,产研确认是 BUG,8.0 版本已修复

手工对比表和索引数据,确认一致

mysql> select (bit_xor(concat(id, k))) from sbtest1;
+--------------------------+
| (bit_xor(concat(id, k))) |
+--------------------------+
|     14493758885395096677 |
+--------------------------+
1 row in set, 1 warning (1 min 31.97 sec)mysql> select (bit_xor(concat(id, k))) from sbtest1 use index(primary);
+--------------------------+
| (bit_xor(concat(id, k))) |
+--------------------------+
|     14493758885395096677 |
+--------------------------+
1 row in set, 1 warning (2 min 17.95 sec)
  1. 打开 fast ddl 开关创建索引后台JOB查看仍然走普通 ddl 模式

分析:

  1. 初次分析是因为 temp-dir 定义的目录不存在
  2. 手工创建后仍然走普通 ddl 模式,重启 TiDB Server 后正常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nest.js 实战 (四):利用 Pipe 管道实现数据验证和转换

什么是管道(Pipe)? 在 Nest.js 中,管道(Pipelines) 是一种强大的功能,用于预处理进入控制器方法的请求数据,如请求体、查询参数、路径参数等。管道允许开发者在数据到达控制器方法之…

BGP协议的综合实验

目录 文章目录 一、题目 二、题目分析 题目需求 IP地址的划分 三、实验配置 IP地址配置 OSPF配置 检查OSPF配置: BGP配置 配置反射器 宣告1.1.1.1/8.8.8.8 查看结果 减少路由条目数量 配置GRE环境 提示:以下是本篇文章正文内容,下面案例可供…

yolo5图片视频、摄像头推理demo

yolo5图片、视频推理demo 图片 import torch# 加载预训练模型 model torch.hub.load(./yolo5, custom, pathyolov5s.pt, sourcelocal)# 加载图片 img 1.jpg# 进行推理 results model(img)# 解析结果 detections results.xyxy[0].cpu().numpy() # [x1, y1, x2, y2, confid…

【好玩的经典游戏】Docker环境下部署赛车小游戏

【好玩的经典游戏】Docker环境下部署赛车小游戏 一、小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 安装Docker环境3.2 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、构建容器镜像4.1 下…

全自动蛋托清洗机介绍:

全自动蛋托清洗机,作为现代蛋品处理设备的杰出代表,凭借其高效、智能、环保的特性,正逐步成为蛋品加工行业的得力助手。 这款清洗机采用了先进的自动化设计理念,从进料、清洗到出料,全程无需人工干预,极大…

C++:类与对象(下)

前言: 前言: 上一篇博客我们介绍了类与对象中的几类默认成员函数,这篇让我们继续来学习类与对象吧! 个人主页:Pianeers 文章专栏:C 如果有问题,欢迎评论区讨论! 希望能帮到大家&…

【数据脱敏】⭐️SpringBoot 整合 Jackson 实现隐私数据加密

目录 🍸前言 🍻一、Jackson 序列化库 🍺二、方案实践 2.1 环境准备 2.2 依赖引入 2.3 代码编写 💞️三、接口测试 🍹四、章末 🍸前言 小伙伴们大家好,最近也是很忙啊,上次的文章…

C++与VLC制作独属于你的动态壁纸背景

文章目录 前言效果展示为什么要做他如何实现他实现步骤获取桌面句柄代码获取桌面句柄libvlc_media_player_set_hwnd函数 动态壁纸代码 总结 前言 在当今的数字世界中,个性化和自定义化的体验越来越受到人们的欢迎。动态壁纸是其中一种很受欢迎的方式,它…

【教学类-70-01】20240722镜子花边(适配5CM圆镜)

背景需求 我想给孩子们做一个小圆镜,花边涂色,打洞,做一个项链样式 1、使用通义万相生成了“圆形镜子,有花边” 边缘细,黑色面积大的图片放到另外一个文件夹里(不用) 从性价比角度&#xff…

Qt窗口介绍

Qt窗口 一、Qt窗口二、菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项在菜单项之间添加分割线综合练习 三、工具栏创建工具栏设置停靠位置设置浮动属性设置移动属性综合练习 四、状态栏状态栏的创建在状态栏中显示实时消息在状态栏显示永久的消息 五、浮动窗口浮动窗口的创建设…

Pytorch实现图像分类-水果数据集分类--深度学习大作业

目录 1.概述 2.设计 3.实现 4.实验 5.总结 1.概述 本次深度学习大作业,我使用AlexNet模型对"Fruits-360"数据集中的两部分水果和蔬菜图片进行分类 2.设计 模型设计:Alexnet网络 卷积层部分:构建了一系列卷积层、激活函数…

【等保测评】服务器——Windows server 2012 R2

文章目录 **身份鉴别****访问控制****安全审计****入侵防范****恶意代码防范****可信验证****测评常用命令** Windows服务器安全计算环境测评 测评对象:Windows server 2012 R2 身份鉴别 (高风险)应对登录的用户进行身份标识和鉴别&#x…

【爱上C++】list用法详解、模拟实现

文章目录 一:list介绍以及使用1.list介绍2.基本用法①list构造方式②list迭代器的使用③容量④元素访问⑤插入和删除⑥其他操作image.png 3.list与vector对比 二:list模拟实现1.基本框架2.节点结构体模板3.__list_iterator 结构体模板①模板参数说明②构…

【无人机】低空经济中5G RedCap芯片的技术分析报告

1. 引言 图一. 新基建:低空经济 低空经济作为一种新兴的经济形态,涵盖了无人机、电动垂直起降飞行器(eVTOL)、低空物流、空中交通管理等多个领域。随着5G网络的普及和演进,5G RedCap(Reduced Capability&a…

Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora是一款基于Markdown语法的轻量级文本编辑器,它的主要目标是为用户提供一个简洁、高效的写作环境。以下是Typora的一些主要特点和功能: 实时预览:Typora支持实时预览功能&#xff0…

腾讯云简单部署MYSQL 8.0

1.安装MySQL8.0资源库 yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm2.安装MySQL8.0 yum -y install mysql-community-server --nogpgcheck . yum -y install mysql-community-server --nogpgcheck 3.启动MySQL并配置开机自启 sys…

【效率提升】程序员常用Shell脚本

文章目录 常用Shell脚本一. 定期更新分区数据二、获取系统资源的使用情况 常用Shell脚本 一. 定期更新分区数据 在某些场景下,我们需要对N年前某一分区的数据进行删除,并添加今年该对应分区的数据,实现数据的流动式存储。 #!/bin/bash dt$…

【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell

一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…

神经网络中如何优化模型和超参数调优(案例为tensor的预测)

总结: 初级:简单修改一下超参数,效果一般般但是够用,有时候甚至直接不够用 中级:optuna得出最好的超参数之后,再多一些epoch让train和testloss整体下降,然后结果就很不错。 高级:…

Redis集群部署Windows版本

Redis集群 之前因为数据量的原因,并没有进行Redis集群的配置需要,现在由于数据量大,需要进行集群部署。 最初在windows系统部署,需要Redis的windows版本,但官方没有windows版本,所以需要去gitHub上找由民…