华为云用户手册

  • 故障切换后,为什么容灾站点的服务器上看不到网卡了? 存储容灾服务以保护组为单位进行生产站点和容灾站点的切换,按照场景可分为切换和故障切换。切换是指用户在生产站点未发生故障时,主动计划性的进行生产站点和容灾站点的切换。故障切换是指生产站点产生故障后,进行生产站点和容灾站点的切换。 切换时,保护实例中的生产站点服务器和容灾站点服务器的网卡会进行相互交换,保证切换前后服务器能以相同的IP地址、MAC地址等提供业务访问能力。 故障切换时,由于保护实例生产站点服务器处于故障状态,生产站点服务器的网卡会迁移到容灾站点服务器,容灾站点服务器的主网卡会卸载后处于“待使用”状态。所以故障切换完成时,原生产站点故障服务器会处于无网卡状态;等待故障服务器恢复后,通过保护组重保护操作,会将原容灾站点服务器卸载后处于“待使用”状态的主网卡挂载到原生产站点服务器,最终实现生产站点服务器和容灾站点服务器网卡相互交换。 父主题: 同步复制(只适用于存量经营)
  • 安装容灾网关时,网关drm进程已经存在,7443端口未被监听,导致配置安装云容灾网关失败 虚拟机执行命令: cat /proc/sys/kernel/random/entropy_avail 查看返回值是否小于500,若小于500,需安装haveged,以满足加密程序对系统熵的要求;系统熵不足会导致线程阻塞问题,网关drm进程存在,7443端口监听很慢或不被监听 。 解决方法: 使用haveged对/dev/random补熵,下载,安装并启动haveged。 查看熵值,与初始熵值对比。 cat /proc/sys/kernel/random/entropy_avail 父主题: 异步复制
  • 操作场景 您可以为需要容灾的云硬盘创建复制对,并将其添加到指定的保护组中。保护组添加复制对时: 如果保护组的状态为“可用”,即停止保护状态,此时,生产站点和容灾站点磁盘只是建立复制对关系,数据并未同步。如需数据同步,请开启保护。 如果保护组的状态为“保护中”,即开启保护状态,此时,新添加复制对创建成功后,会自动开启数据同步。 复制对创建完成后,系统默认容灾站点磁盘名称与生产站点磁盘名称相同,但ID不同。 如果需要修改磁盘名称,请在复制对详情页面单击磁盘名称,进入磁盘详情页面进行修改。
  • 云审计 服务支持的存储容灾服务关键操作列表 表1 云审计服务支持的SDRS操作列表 操作名称 资源类型 事件名称 创建保护组 protectionGroup createProtectionGroup 删除保护组 protectionGroup deleteProtectionGroup 更新保护组 protectionGroup updateProtectionGroup 保护组开启保护(保护组状态为available,开启保护) protectionGroup startProtectionGroup 保护组开启保护(保护组状态为failed-over,即故障切换之后,开启保护) protectionGroup reprotectProtectionGroup 保护组停止保护 protectionGroup stopProtectionGroup 保护组故障切换 protectionGroup failoverProtectionGroup 保护组切换 protectionGroup reverseProtectionGroup 保护组未成功提交job的action类操作 protectionGroup protectionGroupAction 创建保护实例 protectedInstance createProtectedInstance 删除保护实例 protectedInstance deleteProtectedInstance 更新保护实例 protectedInstance updateProtectedInstance 保护实例挂载复制对 protectedInstance attachReplicationPair 保护实例卸载复制对 protectedInstance detachReplicationPair 保护实例添加网卡 protectedInstance addNic 保护实例删除网卡 protectedInstance deleteNic 保护实例变更规格 protectedInstance resizeProtectedInstance 创建复制对 replicationPair createReplicationPair 删除复制对 replicationPair deleteReplicationPair 更新复制对 replicationPair updateReplicationPair 复制对扩容 replicationPair expandReplicationPair 创建容灾演练 disasterRecoveryDrill createDrDrill 删除容灾演练 disasterRecoveryDrill deleteDrDrill 更新容灾演练 disasterRecoveryDrill updateDrDrill 父主题: 云审计
  • 上传镜像 准备一台计算机,需满足如下要求: 安装的容器引擎版本必须为1.11.2及以上。 这台计算机已在访问控制中定义的公网或内网允许访问范围内。 以root用户登录这台计算机。 使用访问凭证创建的访问凭证获取的镜像访问凭证登录镜像仓库。 登录成功会显示“Login Succeeded”。 执行以下命令为镜像打标签。 docker tag [镜像名称1:版本名称1] [镜像仓库地址]/[命名空间名称]/[镜像名称2:版本名称2] 其中: [镜像名称1:版本名称1]请替换为您所要上传的实际镜像的名称和版本名称。 [镜像仓库地址]为仓库的访问地址,获取方式如下: 登录 容器镜像服务 控制台,单击左侧菜单栏“企业版”,然后单击仓库名称进入仓库详情页面,在“总览”页面获取访问地址,如图1所示。 图1 访问地址 [命名空间名称]请替换为您在创建命名空间中创建的命名空间。 [镜像名称2:版本名称2]请替换为您期待的镜像名称和版本名称。 样例如下: docker tag nginx:latest test-01-2v8iom.swr.cn-east-3.myhuaweicloud.com/library/nginx:1.1.1 上传镜像至镜像仓库。 docker push [镜像仓库地址]/[命名空间名称]/[镜像名称:版本名称] 样例如下: docker push test-01-2v8iom.swr.cn-east-3.myhuaweicloud.com/library/nginx:1.1.1 终端显示如下信息,表明上传镜像成功。 fbce26647e70: Pushed fb04ab8effa8: Pushed 8f736d52032f: Pushed 009f1d338b57: Pushed 678bbd796838: Pushed d1279c519351: Pushed f68ef921efae: Pushed v1: digest: sha256:0cdfc7910db531bfa7726de4c19ec556bc9190aad9bd3de93787e8bce3385f8d size: 1780 在仓库详情页面“镜像管理 ”中可查看到对应的镜像信息。 镜像上传以后,您可以在CCE控制台创建工作负载。
  • 镜像仓库其他操作 搜索镜像 支持根据命名空间和镜像名称搜索镜像。 图3 搜索镜像 删除镜像 单击镜像所在行的“删除”即可删除镜像。为避免您误删重要数据,删除镜像时需要输入DELETE进行二次确认。 删除镜像会同时删除镜像下的所有版本,请谨慎操作。 删除镜像版本 单击镜像名称进入镜像详情,在镜像版本所在行单击“删除”即可删除镜像版本。为避免您误删重要数据,删除镜像版本时需要输入DELETE进行二次确认。
  • 什么是标签? 标签是对云上资源的一种可视化的标识。当您拥有相同类型的许多云资源时,可以使用标签按各种维度(例如用途、所有者或环境)对云资源进行分类。 图1 标签示例1 图2 标签示例2 图1 图2说明了标签的工作方式。在此示例中,您为每个仓库分配了两个标签,每个标签都包含您定义的一个“键”和一个“值”,一个标签使用键为“所有者”,另一个使用键为“用途”,每个标签都拥有相关的值。 在容器 镜像服务 中,您可以使用标签对企业仓库中的仓库/命名空间进行标识,以便于对其进行快速查找和管理。
  • 标签的使用场景 当您在使用容器镜像服务时,若存在以下需求,建议您使用标签来快速完成任务: 资源集中处理 对于拥有大量云资源的用户,可以通过使用标签,快速查找标识有某标签的所有云资源,可对这些资源统一进行检视、修改、删除等操作。 资源迁移 资源迁移过程中,用户可以将迁移资源与预定义标签关联,避免大量重复建立标签过程中产生的错误率与效率低下的问题。 自定义计费 您可以在计费系统中查询已打标签的仓库,从而快速对账单进行精细化的统计和分析。
  • 标签命名规则 每个标签都是由一个键值对构成。对于每个资源,每个标签“键”都必须是唯一的,每个标签“键”只能有一个“值”。如果您添加的标签的“值”与该资源上现有标签的“值”相同,新值将覆盖旧值。具体填写规则如下: 表1 键和值填写说明 填写参数 规则 示例 键 不能为空 不能以_sys_开头 键的长度为1~128个字符(中文也可以输入128个字符) 可以由英文字母、数字、下划线、中划线、中文字符组成 可用 UTF-8 格式表示的字母(包含中文)、数字和空格,以及以下字符: _ . : = + - @ Test Department 值 资源标签值可以为空 预定义标签值不可以为空 值的长度为0~255个字符(中文也可以输入255个字符) 可以由英文字母、数字、下划线、中划线、中文字符组成 可用 UTF-8 格式表示的字母(包含中文)、数字和空格,以及以下字符:_ . : / = + - @ Shanghai
  • 管理同步规则 成功创建后即可在“同步规则”页面查看已创建的同步规则,您可以执行以下操作管理同步规则。 图2 同步规则 图3 任务详情 启用:表示规则启用,表示规则关闭。新创建的同步规则默认为启用状态,您可以自行调整。 执行:手动触发同步规则。 编辑:重新编辑同步规则,所有参数均可编辑。 删除:删除该同步规则。 查看同步任务:当同步规则被触发时,符合规则范围的镜像将被同步。同步任务包含的信息如下: 表2 同步任务 参数 说明 任务ID 仓库内唯一的同步执行任务ID。 状态 任务完成状态。 触发模式 手动或自动。 单击“执行”为手动方式,通过规则定义的周期自动执行,则为自动方式。 成功百分比 同步成功的镜像数占总数的百分比。 总数 当前任务需要同步的镜像总数。 持续时间 完成一次任务消耗的时间。 创建时间 同步任务被触发的时间。 操作 详情:任务详细信息,单击后在侧边栏可查看哪些镜像被同步。
  • 同步规则示例 推送到目标仓库 将本仓库中library命名空间中以“nginx-”名称开头的所有版本镜像,推送到目标仓库test-edit-fail的lib1命名空间下,触发模式为手动触发,且覆盖相同名称版本的镜像。 从目标仓库拉取 将目标仓库test-edit-fail的lib1命名空间中以“nginx-”名称开头的所有版本镜像,拉取到本仓库library1命名空间中,触发方式为手动触发,且覆盖相同名称版本的镜像。
  • 训练基础镜像列表 ModelArts中预置的训练基础镜像如下表所示。 表1 ModelArts训练基础镜像列表 引擎类型 版本名称 PyTorch pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 TensorFlow tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64 Horovod horovod_0.20.0-tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64 horovod_0.22.1-pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 MPI mindspore_1.3.0-cuda_10.1-py_3.7-ubuntu_1804-x86_64 不同区域支持的AI引擎有差异,请以实际环境为准。
  • 基于训练基础镜像构建新镜像的操作步骤 您可以参考如下步骤基于训练基础镜像来构建新镜像。 安装Docker。如果docker images命令可以执行成功,表示Docker已安装,此步骤可跳过。 以linux x86_64架构的操作系统为例,获取Docker安装包。您可以使用以下指令安装Docker。 curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh 准备名为context的文件夹。 mkdir -p context 准备可用的pip源文件pip.conf 。本示例使用华为开源镜像站提供的pip源,其pip.conf文件内容如下。 [global] index-url = https://repo.huaweicloud.com/repository/pypi/simple trusted-host = repo.huaweicloud.com timeout = 120 在华为开源镜像站https://mirrors.huaweicloud.com/home中,搜索pypi,可以查看pip.conf文件内容。 参考如下Dockerfile文件内容来基于ModelArts提供的训练基础镜像来构建一个新镜像。将编写好的Dockerfile文件放置在context文件夹内。训练基础镜像地址请参见训练基础镜像列表。 FROM {ModelArts提供的训练基础镜像地址} # 配置pip RUN mkdir -p /home/ma-user/.pip/ COPY --chown=ma-user:ma-group pip.conf /home/ma-user/.pip/pip.conf # 设置容器镜像预置环境变量 # 将python解释器路径加入到PATH环境变量中 # 请务必设置PYTHONUNBUFFERED=1, 以免日志丢失 ENV PATH=${ANACONDA_DIR}/envs/${ENV_NAME}/bin:$PATH \ PYTHONUNBUFFERED=1 RUN /home/ma-user/anaconda/bin/pip install --no-cache-dir numpy 构建新镜像。在Dockerfile文件所在的目录执行如下命令构建容器镜像training:v1。 docker build . -t training:v1 将构建好的新镜像上传至SWR(参考如何登录并上传镜像到SWR)。 参考使用 自定义镜像 创建训练作业(CPU/GPU)章节在ModelArts上使用。
  • 训练脚本mindspore-verification.py文件 mindspore-verification.py文件内容如下: import os import numpy as np from mindspore import Tensor import mindspore.ops as ops import mindspore.context as context print('Ascend Envs') print('------') print('JOB_ID: ', os.environ['JOB_ID']) print('RANK_TABLE_FILE: ', os.environ['RANK_TABLE_FILE']) print('RANK_SIZE: ', os.environ['RANK_SIZE']) print('ASCEND_DEVICE_ID: ', os.environ['ASCEND_DEVICE_ID']) print('DEVICE_ID: ', os.environ['DEVICE_ID']) print('RANK_ID: ', os.environ['RANK_ID']) print('------') context.set_context(device_target="Ascend") x = Tensor(np.ones([1,3,3,4]).astype(np.float32)) y = Tensor(np.ones([1,3,3,4]).astype(np.float32)) print(ops.add(x, y))
  • 场景描述 目标:构建安装如下软件的容器镜像,并在ModelArts平台上使用Ascend规格资源运行训练任务。 ubuntu-18.04 cann-6.3.RC2 (商用版本) python-3.7.13 mindspore-2.1.1 本教程以cann-6.3.RC2.、mindspore-2.1.1为例介绍。 本示例仅用于示意Ascend容器镜像制作流程,且在匹配正确的Ascend驱动/固件版本的专属资源池上运行通过。
  • 场景描述 ModelArts GPU服务器上配置了Mellanox Technologies网卡,支持RDMA(Remote Direct Memory Access)。因此可以在容器镜像中安装MLNX_OFED,使得NCCL可以启用该网卡,提高跨节点通信效率。 NCCL启用该网卡后,跨节点通信采用的方法为NET/IB。未启用该网卡时,跨节点通信采用的方法为NET/Socket。NET/IB在时延与带宽方面都要优于NET/Socket。 表1 ModelArts GPU服务器Mellanox Technologies网卡和MLNX_OFED安装情况 服务器GPU型号 Mellanox Technologies网卡 服务器安装的MLNX_OFED版本 推荐容器镜像安装的MLNX_OFED版本 Vnt1 ConnectX-5 4.3-1.0.1.0/4.5-1.0.1.0 4.9-6.0.6.0-LTS Ant8/Ant1 ConnectX-6 Dx 5.5-1.0.3.2 5.8-2.0.3.0-LTS
  • 已有镜像如何适配迁移至ModelArts训练平台 已有镜像迁移至训练管理需要关注如下步骤。 为镜像增加训练管理的默认用户组ma-group,“gid = 100”。 如果已存在“gid = 100”用户组,可能会报错“groupadd: GID '100' already exists”。可通过命令“cat /etc/group | grep 100”查询是否已存在gid = 100用户组。 如果已存在“gid = 100”用户组,则该步骤跳过,下文Dockerfile中删除“RUN groupadd ma-group -g 100”命令。 为镜像增加训练管理的默认用户ma-user,“uid = 1000”。 如果已存在“uid = 1000”用户,可能会报错“useradd: UID 1000 is not unique”。可通过命令“cat /etc/passwd | grep 1000”查询是否已存在uid = 1000用户。 如果已存在“uid = 1000”用户,则该步骤跳过,下文Dockerfile中删除“RUN useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user”命令。 修改镜像中相关文件权限,使得ma-user,“uid = 1000”用户可读写。 您可以参考如下Dockerfile,修改已有镜像,使其符合新版训练管理自定义镜像的规范。 FROM {已有镜像} USER root # 如果已存在 gid = 100 用户组,则删除 groupadd 命令。 RUN groupadd ma-group -g 100 # 如果已存在 uid = 1000 用户,则删除 useradd 命令。 RUN useradd -m -d /home/ma-user -s /bin/bash -g 100 -u 1000 ma-user # 修改镜像中相关文件权限,使得 ma-user, uid = 1000 用户可读写。 RUN chown -R ma-user:100 {Python软件包路径} # 设置容器镜像预置环境变量。 # 请务必设置 PYTHONUNBUFFERED=1, 以免日志丢失。 ENV PYTHONUNBUFFERED=1 # 设置容器镜像默认用户与工作目录。 USER ma-user WORKDIR /home/ma-user 编写好Dockerfile后,通过执行如下所示命令进行新镜像构建。 docker build -f Dockerfile . -t {新镜像} 构建成功后将新镜像上传至SWR(参考如何登录并上传镜像到SWR)。 上述内容为关键代码样例,为了方便理解迁移过程,推荐您体验完整迁移案例:示例:从0到1制作自定义镜像并用于训练(PyTorch+CPU/GPU)。 父主题: 准备训练镜像
  • Step1 创建OBS桶和文件夹 在OBS服务中创建桶和文件夹,用于存放样例数据集以及训练代码。如下示例中,请创建命名为“test-modelarts”的桶,并创建如表1所示的文件夹。 创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。 请确保您使用的OBS与ModelArts在同一区域。 表1 OBS桶文件夹列表 文件夹名称 用途 obs://test-modelarts/ascend/demo-code/ 用于存储Ascend训练脚本文件。 obs://test-modelarts/ascend/demo-code/run_ascend/ 用于存储Ascend训练脚本的启动脚本。 obs://test-modelarts/ascend/log/ 用于存储训练日志文件。
  • 如何免费试用 数据仓库 服务? 免费试用活动仅限新用户可以参加。如果您的账号从未创建过 GaussDB (DWS)集群,且已完成实名认证,就有资格免费试用GaussDB(DWS)服务1个月。 您可以登录GaussDB(DWS)管理控制台,单击“立即申请试用”开通免费试用套餐。不同区域之间的免费试用套餐不互通,请根据您的实际需求慎重选择。 当您开通免费试用套餐后,在免费时间段内,您可以直接登录GaussDB(DWS)控制台创建相应区域、节点规格和节点数量的集群,该规格集群会自动享受免费试用活动。如果您选择使用其他节点类型,将按标准的按需费率支付费用,计费详情请参见GaussDB(DWS)价格详情。 当1个月免费试用结束时,您可以删除集群,从而避免产生任何费用,或者您也可以继续保留集群,此时将按标准的按需费率支付费用。 父主题: 计费问题
  • GaussDB(DWS)和 MRS 分别应在何时使用? 如果需要使用自定义代码通过大数据处理框架 (如Apache Spark、Hadoop或HBase) 来处理和分析超大数据集,则应该使用MRS。MRS让您能够控制集群的配置和集群上安装的软件。 GaussDB(DWS)这类数据仓库是专为不同类型的分析而设计的。数据仓库旨在将多个不同来源(如库存、财务和零售销售系统)的数据汇集在一起。为了确保整个公司的报告具有一致的准确性,数据仓库采用一种高度结构化的方式来存储数据。这种结构可将数据一致性规则直接构建到数据库的表中。同时对标准SQL,事务支持传统数据库语法有很好的兼容性。 当您需要对大量结构化数据执行复杂查询并获得超快性能时,GaussDB(DWS)就是理想的服务选择。 父主题: 通用问题
  • PG数据库定时同步GaussDB(DWS)服务如何收费? GaussDB(DWS)数据定时同步到PG数据库,可以通过以下方式实现: 使用 云数据迁移 CDM )实现GaussDB(DWS)集群数据库与PG数据库之间的数据迁移同步,具体收费情况请参见云数据迁移价格说明。 使用GaussDB(DWS)导出数据到 对象存储服务 (OBS),然后再将数据从OBS导入PG数据库来实现数据同步。该过程只有数据存储在OBS中会产生费用,OBS数据存储的计费标准,请参见对象存储服务价格说明。 父主题: 计费问题
  • 为什么GaussDB(DWS)的性能在极端场景下并未比单机数据库好 GaussDB(DWS)中由于MPP架构的限制导致少部分PG系统方法、函数无法下推到DN节点来执行,仅能在CN端出现性能瓶颈。 原理解释: 一个操作能够并行执行是有条件的,需要逻辑上能够并行,比如做汇总(SUM),可以各个节点(DN)并行汇总后,最后的汇总一定是不能并行,要在某一个节点(CN)上执行,由于大部分的汇总工作已经在DN节点完成,CN端的工作是比较轻量的。 某些场景必须要集中执行,比如事务号,必须要保证全局唯一,该任务在系统里是通过GTM来实现的,因此,GTM也是全局唯一的组件(主备)。所有需要全局唯一的任务都是通过GaussDB(DWS)中的GTM来完成,只是在设计上尽量避免阻塞在GTM上,因此GTM并没有太多瓶颈,而且有些场景下还可以GTM-Free和GTM-Lite。 从传统单机数据库的应用开发模式到并行数据库,为确保获得更好的性能,可能需要对业务进行少量改动,尤其是传统Oracle的存储过程互相嵌套的开发模式,如果要保证高性能,需要进行业务修改及对应的适配。 解决方案: 如遇到此类问题,请参考《数据仓库服务数据库开发指南》中的“优化查询性能”章节。 或者,请联系技术人员进行业务适配的修改调优。 父主题: 数据库性能
  • 表膨胀的原因 未开启autovacuum GaussDB(DWS)提供自动执行VACUUM和ANALYZE命令的系统自动清理进程(autovacuum),用于回收被标识为删除状态的记录空间,并更新表的统计数据。 用户未开启autovacuum的同时又没有合理的自定义vacuum调度,导致表的脏数据没有及时回收,新的数据又不断插入或更新,膨胀是必然的。 资源回收不及时 开启了autovacuum,但是各种原因导致回收不及时,并且新的数据又不断产生,从而导致膨胀。回收不及时有以下原因: IO性能差 当数据库非常繁忙时,如果IO性能较差,会导致回收脏数据变慢,从而导致表膨胀。 这种情况一般出现在占用数据库内存较大的表上,并且这些表正在执行整表vacuum,因此产生大量IO,导致表自身或其他表膨胀。 autovacuum触发较迟 触发autovacuum操作的阈值设置过高,大量表上被删除、插入或更新的记录数没有及时处理,导致表膨胀。 autovacuum线程繁忙 所有自动清理线程繁忙,某些表产生的脏数据超过阈值,但是在此期间没有autovacuum线程可以处理脏数据回收的事情,可能发生表膨胀。 如果数据库的表很多,而且都比较大,那么当需要vacuum的表超过了配置autovacuum_max_workers的数量,这些表就要等待空闲的autovacuum线程。这个阶段就容易出现表的膨胀。 数据库中存在长SQL或带XID的长事务 当DWS数据库中存在未结束的SQL语句或者未结束的持有事务ID的事务,在此SQL执行时间范围内或在此事务过程中产生的脏数据无法回收,导致数据库膨胀。 开启了autovacuum_vacuum_cost_delay 在开启了autovacuum_vacuum_cost_delay后,会使用基于成本的脏数据回收策略,可以有利于降低VACUUM带来的IO影响,但是对于IO性能高的系统,开启autovacuum_vacuum_cost_delay反而会使得垃圾回收的时间变长。 autovacuum_naptime设置间隔时间过长 批量删除或更新大表 例如对于一个10GB的表,一条SQL或一个事务中删除或更新9GB的数据,这9GB的数据必须在事务结束后才能进行脏数据回收,无形中增加了膨胀的可能。
  • 相关空间回收参数说明 autovacuum = on 控制数据库自动清理进程(autovacuum)的启动。自动清理进程运行的前提是将track_counts设置为on。 log_autovacuum_min_duration = 0 当自动清理的执行时间大于或者等于某个特定的值时,向服务器日志中记录自动清理执行的每一步操作。设置此选项有助于追踪自动清理的行为。 autovacuum_max_workers = 10 设置能同时运行的自动清理线程的最大数量。 autovacuum_naptime = 1 设置两次自动清理操作的时间间隔。 autovacuum_vacuum_cost_delay = 0 设置在自动VACUUM操作里使用的开销延迟数值。 更多关于空间回收参数说明,参见自动清理。
  • 减少或避免表膨胀 开启autovacuum。 提高系统的IO能力。 调整触发阈值,让触发阈值和记录数匹配。 增加autovacuum_max_workers和autovacuum_work_mem,同时增加系统内存。 IO性能较好的系统,关闭autovacuum_vacuum_cost_delay。 设计应用程序时,避免使用大批量的更新、删除操作,可以切分为多个事务进行。 应用程序设计时,尽量避免下列操作: 打开游标后不关闭。 在不必要的场景使用repeatable read或serializable事务隔离级别。 对大的数据库执行gs_dump进行逻辑备份(隐式repeatable read隔离级别的全库备份)。 长时间不关闭申请了事务号的事务(增、删、改等DDL操作的SQL)。
  • JDBC样例工程的IntelliJ IDEA形式运行 在IntelliJ IDEA的jdbc-examples工程的JDBCExample类单击右键,在弹出菜单中选择“Run JDBCExample.main()”菜单项。如下图所示。 在IntelliJ IDEA输出窗口查看样例代码中的HQL所查询出的结果会有如下信息: Create table success! _c0 0 Delete table success!
  • JDBC样例工程的命令行形式运行 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUC CES S”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的jar包。 在Windows或Linux上创建一个目录作为运行目录,如“D:\jdbc_example”(Windows环境)或“/opt/jdbc_example”(Linux环境),将1中生成的“target”目录下包名中含有“-with-dependencies”字段的jar包放进该路径下,并在该目录下创建子目录“src/main/resources”。将jdbc-examples工程resources目录下的所有文件拷贝到“resources”下。 在Windows环境下执行: cd /d d:\jdbc_example java -jar hive-jdbc-example-1.0-SNAPSHOT-jar-with-dependencies.jar 在Linux环境下执行: chmod +x /opt/jdbc_example -R cd /opt/jdbc_example java -jar hive-jdbc-example-1.0-SNAPSHOT-jar-with-dependencies.jar 以上jar包名称仅供参考,具体名称以实际生成为主。 在命令行终端查看样例代码中的HQL所查询出的结果。 Windows环境运行成功结果会有如下信息: Create table success! _c0 0 Delete table success! Linux环境运行成功结果会有如下信息: Create table success! _c0 0 Delete table success!
  • 在Windows中调测程序 确保本地的hosts文件中配置了远程集群所有主机的主机名和业务IP映射关系。 通过IntelliJ IDEA可直接运行Producer.java,如图1所示: 图1 运行Producer.java运行 运行后弹出控制台窗口,可以看到,Producer正在向默认topic(example-metric1)发送消息,每发送10条,打印一条日志。 图2 Producer运行窗口
  • 操作步骤 打开IDEA工具,选择“Create New Project”。 图1 创建工程 在“New Project”页面,选择“Scala”开发环境,并选择“Scala Module”,然后单击“Next”。 如果您需要新建Java语言的工程,选择对应参数即可。 图2 选择开发环境 在工程信息页面,填写工程名称和存放路径,设置JDK版本和Scala SDK,然后单击“Finish”完成工程创建。 图3 填写工程信息
  • 操作步骤 “doris-jdbc-example”样例运行成功后,显示信息如下: 2023-08-17 23:13:13,473 | INFO | main | Start execute doris example. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:41) 2023-08-17 23:13:13,885 | INFO | main | Start create database. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:44) 2023-08-17 23:13:13,949 | INFO | main | Database created successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:46) 2023-08-17 23:13:13,950 | INFO | main | Start create table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:49) 2023-08-17 23:13:14,132 | INFO | main | Table created successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:51) 2023-08-17 23:13:14,133 | INFO | main | Start to insert data into the table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:54) 2023-08-17 23:13:14,733 | INFO | main | Inserting data to the table succeeded. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:56) 2023-08-17 23:13:14,733 | INFO | main | Start to query table data. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:59) 2023-08-17 23:13:15,079 | INFO | main | Start to print query result. | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:121) 2023-08-17 23:13:15,079 | INFO | main | c1 c2 c3 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:126) 2023-08-17 23:13:15,079 | INFO | main | 0 0 0 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 1 10 100 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 2 20 200 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 3 30 300 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 4 40 400 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 5 50 500 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 6 60 600 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 7 70 700 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | 8 80 800 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | 9 90 900 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | Querying table data succeeded. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:61) 2023-08-17 23:13:15,081 | INFO | main | Start to delete the table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:64) 2023-08-17 23:13:15,114 | INFO | main | Table deleted successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:66) 2023-08-17 23:13:15,124 | INFO | main | Doris example execution successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:71) Process finished with exit code 0 Doris对接SpringBoot运行结果 在浏览器上访问链接“http://样例运行节点IP地址:8080/doris/example/executesql”,IDEA正常打印日志,请求返回如下图所示: 图1 返回样例运行信息
共100000条