• [迁移系列] 【TD自定义函数】td_regexp_replace
    函数名称:td_regexp_replace(text,text,text)函数说明:因dws也有regexp_replace,此函数区别区别于dws,因此命名为td_regexp_replace第一个参数:输入的字符串第二个参数:输入的正则表达式第三个参数:匹配后替换的字符返回值说明描述:text样例:select td_regexp_replace('1a2b3c','\d','w'); td_regexp_replace ------------------- wawbwc语言:PLSQL函数定义:CREATE OR REPLACE FUNCTION public.td_regexp_replace(text,text,text) RETURNS text LANGUAGE sql STRICT NOT FENCED SHIPPABLE as $$ select regexp_replace($1,$2,$3,'g'); $$ ;
  • [其他] 【总贴】HCS/HCSO形态DWS管控面故障案例总结
    安装部署ECF工步:Region:创建EI公共CDK集群 失败https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=154104ECF工步:Region:初始化Master虚拟机失败https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=168590https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=168388 变更故障 agent升级失败cid:link_26集群升级时因发包错误导致升级中止https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=92970客户集群升级时失败https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=92254租户面升级UpdatePreinstallTask失败https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=1327481859560,参数信息校验失败,措施信息:Failed to login gauss dbhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=154096ECF-Common/ECF-Cluster用户ecf登录验证失败https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=149808802升级803,参数信息校验失败: failed to login mysql dbhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=141530实例侧故障使用EIP访问不通,专线访问不通cid:link_29使用客户端连接DWS弹性ip报错https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=129665集群ntp配置异常,节点时间有差异https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=164998集群创建扩容的BMS可用区不显示https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=124480规格不显示https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=93562https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=150650https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=124336创建资源租户失败——ResTenantTaskcid:link_30https://bbs.huaweicloud.com/forum/thread-160669-1-1.html创建备份用户失败——ResUserTaskcid:link_22集群绑定EPS失败——RdsBindEpsTask 创建资源租户VPC失败——RdsCreateResourceTenantVpcTaskhttps://bbs.huaweicloud.com/forum/thread-146791-1-1.htmlhttps://bbs.huaweicloud.com/forum/thread-107164-1-1.html创建安全组失败——RdsSecurityGroupTaskhttps://bbs.huaweicloud.com/forum/thread-160673-1-1.html创建实例失败——RdsCreateInstanceTaskhttps://bbs.huaweicloud.com/forum/thread-107352-1-1.htmlhttps://bbs.huaweicloud.com/forum/thread-107166-1-1.htmlcid:link_28管控面Ping实例失败——RdsPingInstanceManageIpTaskcid:link_27https://bbs.huaweicloud.com/forum/thread-159358-1-1.htmlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=15064租户实例Mount网卡失败——RdsCreatePortTaskcid:link_23下载安装包--RdsDownloadPackageTaskhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=165795租户实例初始化失败——RdsInitInstacenTaskhttps://bbs.huaweicloud.com/forum/thread-112311-1-1.htmlhttps://bbs.huaweicloud.com/forum/thread-93210-1-1.htmlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=158691创建内网域名失败——CreatePrivateZoneTaskcid:link_18启动监控失败——RdsInstanceCreateCompletedTaskhttps://bbs.huaweicloud.com/forum/thread-112367-1-1.html监控上报失败——RdsActiveClusterTaskhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=168394快照管理客户集群因网络压力备份失败cid:link_31DWS快照删除有文件残留,残留文件长期堆积,导致obs空间被占满影响本服务和其他服务https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=121998界面类故障集群详情规格显示不一致https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=108380解除弹性IP报错https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=147351监控指标不显示集群信息,不显示指标https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=93572https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=153410DWS安装完成后不显示创建集群按钮https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=150656集群页面显示磁盘容量异常https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=93174工作负载队列关联用户报错https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=167044监控面板DMS界面内容不显示https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=110400DMS agent占用内存导致内核进程异常https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=168527部分监控面板没有信息https://bbs.huaweicloud.com/forum/thread-173708-1-1.htmlDMS接口报错https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=110762https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=104048实例登录问题connection.sh登录超时cid:link_24connection.sh连接不上所有节点,解析失败https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=147084
  • [其他] 【总贴 】HCS/HCSO管控面运维技巧
    通过cloudscope从CDK查询DWS服务组件参数信息 802:https://bbs.huaweicloud.com/forum/thread-169569-1-1.html803:https://bbs.huaweicloud.com/forum/thread-169568-1-1.htmlDWS登录容器https://bbs.huaweicloud.com/forum/thread-170316-1-1.html密文加解密方法https://bbs.huaweicloud.com/forum/thread-170251-1-1.html登录管控面后台数据库 dwscontroller  ecf  dmshttps://bbs.huaweicloud.com/forum/thread-173822-1-1.html登录HCSO/HCS形态DWS集群节点https://bbs.huaweicloud.com/forum/thread-173823-1-1.html获取DWS快照备份obs的ak,skhttps://bbs.huaweicloud.com/forum/thread-173821-1-1.html   获取裸金属实例操作系统root密码/获取BMS root密码https://bbs.huaweicloud.com/forum/thread-170667-1-1.htmlDWS管控面服务修改参数并让参数立即生效https://bbs.huaweicloud.com/forum/thread-173819-1-1.htmlDWS集群之BMS裸金属磁盘RAID配置https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=179153手动注册BMS/ECS镜像https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=181926
  • [其他] 登录HCSO/HCS形态DWS集群节点
    操作前提:获取OC,cloudscope登录信息获取oc域名和账号获取cloudscope域名和op_cdk_sso账号密码步骤一:找到虚拟机入口登录oc页面,选择ServiceOM,点击虚拟机步骤二:获取CDKmaster虚拟机IP在虚拟机页面搜索关键字EICommon-region-master获取到的虚拟机Ip即为CDK master节点ip地址{CDKMasterIP},步骤三:在cdk中找到dwscontroller服务使用op_cdk_sso用户登录cloudscope页面1)运维服务-->auotodepoy-cdk2)进入HCS802服务管理-->服务升级,HCS03及以上 变更管理--》服务升级3)下拉条件:红色框起来的部分第一行的三个需要选择对应的region第二行:选择ei-dbs-xxx等ei开头的选择dws步骤四:获取Controller的mysql数据库连接信息db.urldb.username db.password在页面进入升级,在搜索框中搜索“db.”获取界面后台mysql数据库连接信息:db.password :获取db节点密码的密文,在步骤七使用AESTool.jar解密db.username :用户    db.driver:驱动,后面不用db.url:连接,获取ip,端口步骤五:登录步骤二获取的ip对应主机 虚拟机密码从华为云账号一览表获取 步骤六:登录运维容器在终端使用root用户登录cdk master节点后,执行以下命令可以进入dws-maintain容器:HCS 811以下:kubectl get pod -n dws-maintain   --查有两个容器,是负载集群,都可以登录kubectl exec -ti {pod name} bash -n dws-maintain    -- pod为查询的容器名HCS 811--HCS 821:kubectl get pod -n  ecf  --查有两个容器,是负载集群,都可以登录kubectl exec -ti {pod name} bash -n ecf    -- pod为查询的容器名cd opsTool    --cd到脚本目录下步骤七:解密步骤四获取的密码密文进入dws-maintain容器后,执行以下命令,解密dws密码:java -jar AESTool.jar2 { dbPasswordEncrypt}步骤八:执行connectTool.sh脚本登录节点进入dws-maintain容器后,可以执行以下命令登录dws实例节点,其中user字段在630及之前版本为root,在930及之后版本为ecf,若需要输入密码,则粘贴步骤七中密码即可:sh connectTool.sh -u{user} -drms -h{db ip} -p7306 -n {instance name} –tStandalone 参数说明:-u   用户名 对应db.username-d   数据库 对应db.url 中“jdbc:mariadb://170.75.4.205:7306/rms?autoReconnect=true”红色部分-h   连接ip  对应db.url 中“jdbc:mariadb://170.75.4.205:7306/rms?autoReconnect=true”红色部分 -p   端口   对应db.url 中“jdbc:mariadb://170.75.4.205:7306/rms?autoReconnect=true”红色部分-n   实例名称 对应mysql库中rds_instance.name       或者虚拟机—实例名     serviceOM 裸金属服务--》裸金属实例名称     oc资源监控---》数仓集群—》实例名称
  • [其他] 登录管控面后台数据库 dwscontroller ecf dms
    dws服务后台数据库有两种:mysql,gaussdb100dwscontroller,ecf为mysql数据库dms两个服务为gaussdb100数据库一:查询cdk参数登录cdk--》变更管理--》服务升级--》1.dwscontroller:选dwscontroller--》下一步--》使用“db.”过滤参数获取数据库连接信息2.dms-monitoring:选dwscontroller--》下一步--》使用“data”过滤参数获取数据库连接信息3.dbevent:选dbevent--》下一步--》使用“data”过滤参数获取数据库连接信息4.dbmonitor:选dbsmonitor--》下一步--》使用“data”过滤参数获取数据库连接信息二:密码解密      获取的数据库密码密文,需要使用工具解密     具体解密请参考        cid:link_0三:后台登录1.mysql 登录     1).对应从cdk对应服务获取数据库连接信息     2).登录运维容器解密密码同时连接mysql服务 mysql       mysql -u{db.username} -p{password} -D{dbname} -h{ip} -P{port}2.gaussdb 100登录      root登录     su abadmin     gsql -d dms -p 8635
  • [其他] 获取DWS快照备份obs的ak,sk
    1.dwscontroller后台数据库rms 请参考数据库登录2.执行如下sql语句获取obsUser,ak,sk信息select obsUser,ak,sk FROM rds_obs_info;sk 进行解密解密请参考 加密密文解密: https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=170251
  • [其他] DWS管控面服务修改参数并让参数立即生效
    第一步:在服务中查找到对应的参数并修改第二步:修改参数 LIVENESS_PROBE.PERRIOD_SECONDS 和原值不一样,保存升级即可触发pod重新初始化第三步:下一步升级,大概需要5分钟左右
  • [其他] DWS-10000 告警
          DWS管控面告警,DWS-10000参考案例:https://bbs.huaweicloud.com/forum/thread-184880-1-1.html1、根据产品文档排查。未在ossres-dws.log日志里找到dws_10000的报错。告警节点为ecf虚拟机。查看ossres-ecf.log找到报错2、根据类似案例http://rnd-dayu.huawei.com:8081/index.php/Question/detail?id=70418 ,结论是:一个查询结果为null的告警,对现有集群没有影响。没有排查过程,现在ossres-ecf.log报could not extract resultSet 想确认下是不是一个问题。是否对集群没有影响。3、通过查看报错日志发现“SQL Error:1054 SQL State:42s22”是实体类中的变量和数据库表中的类对不上;rds_cluster中缺少字段,导致取样未成功,“clustero-cationProgress”这个列字段数据库中无法找到。检查rms数据库,发现字段齐全,并未缺失。检查ecf-cm库中rds_cluster表,发现确实缺少字段。4、进入ecf-cm库的方法:微服务里面查一下ip   用户  密码    连接方式和DWS的数据库一模一样。ALTER TABLE rds_cluster ADD actionProgress VARCHAR(128)加上缺少的字段后,仍然缺其他字段的报错。对比现网环境的ecm库和rms库补齐字段,解决报错。情况二1.参考案例https://bbs.huaweicloud.com/forum/thread-184880-1-1.html无法解决2.通过controller日志查看告警信息提示:jobMonitorThread or DBMonitorThread is not working这个告警只有创建集群的时候才出现3.这个是框架的告警,跟操作没有关系。这个告警是核心线程异常,重新拉pod就好了
  • [其他] 部分监控面板没有信息
    【DWS】【错误信息】部分监控面板没有信息【适用版本】HCS 8.0.3, DWS 8.1.1.2 (管控面430版本,租户面630版本)【问题现象】DWS集群监控面板部分显示监控信息:即 数据仓库服务-》集群列表-》操作-》监控面板进入某个集群的监控页面,其中集群概览,监控-》主机监控,设置-》监控设置 中网络监控,数据库监控,查询监控实例监控,负载监控,诊断 这些监控页面没有信息,其他监控有信息。【分析过程】1、登录dms库,确认dms_meta_cluster,dms_meta_host是否有信息select * from dms_meta_cluster;select * from dms_meta_host where cluster_id = 'xxx';2、登录CDK Master,登录dms-monitor容器查看日志                #kubectl get pod -n dws               #kubectl -ti exec dms-monitoring-xxxxxx -n dws  bash               #vi logs/dms-monitoring.log日志中出现“relation ‘DMS_NTC_HARDWARE_HOST_DISKIO_VIEW’ does not exist”信息3、F12-》network-》Headers-》Response url查看job的接口信息https://silvan_float_ip/v1/apigw/extension/api-fusion/apis租户面630版本用的是v2接口,430版本管控面没有v2接口,那么就是管控面与租户面版本存在兼容问题【解决方案】       参考《华为云Stack 8.0.3 数据仓库服务(DWS)租户面升级指导书(8.1.0.101&8.1.1.1--8.1.1.2) 01》在DMK中修改APIGateway进行规避步骤 1 使用apigw用户登录DMK。apigwk密码可以从《华为云Stack 8.0.x 账户一览表》中A类(Portal)中查询。步骤 2 增加一条API得映射记录,选择【部署向导】-【第三方组件】【APIG-Tool】,选择部署操作【注册Api】,点击“下一步”,修改配置文件,增加一条记录,并点击执行。 /v2.0/{projectId}/clusters/{clusterId}/dms/collection/metric,v2.0,HTTPS,POST,DWS,{dms-collection-dns},{dms-collection-lb},30,test,/v1.0/{projectId}/clusters/{clusterId}/dms/collection/metric,HTTPS,,false备注:dms-collection-dns表示dms-collection在ApiG中绑定得域名dms-collection-lb表示dms-collection微服务的LB地址,二者和/v1.0/{projectId}/clusters/{clusterId}/dms/collection/meta/instance保持一致即可。
  • [生态空间] dws,怎么创建日期分区表?
    distribute by hash(cjrq)partition by range(cjrq) 显示不对distribute by hash(cjrq)partition by values(cjrq) 显示values只支持dfs表。正确的日期分区表语法是什么呢?
  • [生态空间] 【DWS 8.1.1】【copy】使用python方式调用copy批量插入数据
    【功能模块】数据导入【操作步骤&问题现象】客户这里使用python+jdbc方式连接DWS,现在想在python中使用copy方式进行数据批量入库,请问这种方式如何实现,最好有示例代码【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [知识分享] 【数据库系列】GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘
    >摘要:云服务环境下,如何解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战。华为云GaussDB(for MySQL)通过引入并行创建索引技术,很好地解决了批量索引创建和临时添加索引等性能瓶颈问题,帮助用户更快建立好索引。想要进一步了解快速创建索引的秘诀,请不要错过本文。本文分享自华为云社区[《GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘》](https://bbs.huaweicloud.com/blogs/300350?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=database&utm_content=content),作者:华为云数据库资深架构师苏斌。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/17/104111u3mwioirlvzicgzc.png) 苏斌,华为云数据库资深架构师,拥有16年数据库内核研发经验,之前作为MySQL官方InnoDB团队主要研发人员,参与和主导了多个重要特性的开发和发布。目前在华为公司负责和参与华为云RDS主要产品RDS for MySQL和GaussDB(for MySQL)内核功能的设计和研发。 # 导读 云服务环境下,如何解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战。华为云GaussDB(for MySQL)通过引入并行创建索引技术,很好地解决了批量索引创建和临时添加索引等性能瓶颈问题,帮助用户更快建立好索引。想要进一步了解快速创建索引的秘诀,请不要错过本文。 # 关于MySQL索引 我们都知道,数据库使用索引技术加快数据的查询。MySQL数据库也支持若干种索引结构提高查询的性能(参见MySQL文档:https://dev.mysql.com/doc/refman/8.0/en/create-index.html),其中使用最广泛的是B+tree索引,因为B+tree索引在查询和修改的性能之间有很好的平衡,同时其存储和维护的代价也是比较优的。 MySQL的表本身由聚簇索引(必须是B+tree索引)表示,再加上若干个二级索引,包括B+tree索引,共同组成一个MySQL的独立表,可以说MySQL的表是由一组索引共同组成的。我们都知道索引是一把双刃剑,充分的索引可以更好地提升可以适配的查询的性能,但是需要维护这些索引使得其和数据同步,所以在数据修改操作阶段,更多的索引也会带来更高的开销。索引创建与否的权衡通常是动态的,用户不一定能做到在表定义之初就知道需要建立哪些索引,需要随着业务的发展变化而调整索引,这也带来了动态索引创建的一些问题。 # MySQL的索引创建逻辑 我们先看一下MySQL索引创建的逻辑。首先,MySQL索引的创建可以使用两种不同的DDL(Data Definition Language: 数据定义语言)算法来实现。第一种是COPY算法,它非常低效,就是在两个表之间进行数据拷贝,来完成表结构相关的修改,尤其是它要求加表锁,现在基本不使用了。第二种是INPLACE算法,该算法不要求加锁,因此很多DDL操作是不阻塞DML(Data Manipulation Language: 数据操纵语句)操作的,比如创建索引。该算法具体的实现在存储引擎层面完成,可以进行更多的优化。实际上DDL语句还有一种INSTANT算法,但是它无法支持创建索引操作,这里不展开介绍。 对于INPLACE算法,在5.7版本之前,是采用索引记录不断地向建好的空索引插入的方式。由于插入的数据的无序性,该方法导致了明显的性能问题和潜在的空间浪费。在5.7版本以后,MySQL优化了建索引步骤,将其改进为对已排序的索引记录进行自底向上批量插入并且紧凑拼装的创建方式,如果有多个索引要创建,会单独对每个索引执行相同的算法。新的算法会经历读取数据、排序数据和创建索引这几个主要步骤。 总体而言,创建索引这类DDL操作,会比普通的DML等操作要费时,而该类DDL耗时会导致用户在继续动态添加索引加速查询的时候,需要等待很长的时间,极大影响业务;而且用户的MySQL实例开启了Binlog复制,耗时的DDL操作容易引起备库的长时间落后。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/17/104145g6lg3pvm0f1pbdvb.png) MySQL的创建索引流程图 # 云化场景下索引创建的问题 随着越来越多用户把数据托管在云服务上,以及用户数据量的不断增长,前述的动态添加索引导致的问题非常影响用户体验。同时客户的单表数据逐渐达到几TB甚至几十TB,客户对创建索引太慢所带来的性能问题的抱怨越来越多,尤其是创建索引周期如果太长,我们可能很难找到一段合适的业务低峰期来动态创建索引,避免业务的波动。因此,如何在云服务环境下,解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战。 在云化场景下,还有一个主要场景对客户的体验非常重要。我们知道客户的业务要迁移上云,需要对数据进行大规模的迁移(华为云提供了数据复制服务DRS工具支持各类数据迁移场景),数据迁移比较高效的方式为: 1. 逻辑导出源端数据 2. 在目标端建表(注意,表不含二级索引) 3. 将源端导出的数据插入到目标端 4. 对目标端的表建立二级索引 如果涉及动态数据同步,相关步骤会更复杂一些,由于和该主题无关,这里不展开。以上步骤中,需要重点注意的是步骤2和4,在目标端创建表的时候先不创建二级索引。这个优化对性能影响很大,尤其是一个表有很多二级索引的场景。我们知道Btree索引的插入如果是有序的,对插入性能和结果的空间利用率是最好的,因为Btree索引的分裂会在插入区域的尾部产生,同时由于分裂算法的优化,分裂产生的页面填充率会比较高;相反地,如果是随机插入,尤其是并发地随机插入,很容易导致Btree索引在不同的节点进行分裂,并且分裂后的页面填充率都处于一个半满的状态,导致Btree最终的一个膨胀。 有了这个背景之后,我们就容易理解上面的问题,插入表数据的时候,我们屏蔽了二级索引,等所有数据都准备好了,再采用批量建立索引的方式创建二级索引,这对于二级索引创建效率是最高的。如果不这么做,每插入一条记录,就要去插入相应的二级索引,那么二级索引就是一个无序的随机插入,并发起来性能会变差很多。 虽然在数据同步准备好后,批量创建二级索引是一个有效的方案,但是如果数据量很大,这么创建二级索引还是非常耗时,导致客户在数据迁移完之后需要等待很长时间才能开展业务,这个等待周期可能是小时甚至天级别的。虽然可以考虑表级别的并发创建索引,但是这个方法也有明显的缺点:应用场景有限,要求有多表;以及表和表之间的并发其实不是一个最有效的并发形式,相互影响比较大。 # GaussDB(for MySQL)如何快速创建索引? 综上所述,在创建索引这个点上存在两个性能瓶颈点:一个是用户迁移数据之后的批量索引创建;第二个是用户临时需要添加一个二级索引。无论哪个点,我们都需要更快的建立好索引,提升用户的使用体验。 华为云GaussDB(for MySQL)引入了**并行创建索引的技术**,它改进了社区版MySQL创建索引只用单线程的问题,以此提高创建索引的效率,并一起解决了前述两个痛点。前面提到的社区版创建索引逻辑是单线程的,首先存在资源利用率不够饱满的问题;其次创建索引过程是CPU和IO开销交替进行的过程,在做一个操作的时候,即使不是资源竞争的操作也只有等待。多线程创建索引可以充分利用CPU和IO资源,同时有的线程在做CPU计算时,别的线程可以并发的做IO操作。 GaussDB(for MySQL)使用的并行创建索引,是一个全链路的并行技术。前面提到,创建索引包含了若干个阶段,我们的并行创建算法,对这里的每个阶段都做并行处理,从读取数据、排序、到创建索引,都是并行操作,每一步都由指定的N个线程并发处理。它的逻辑如下图所示: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/17/1042268g6a9qump3cckxaj.png) GaussDB(for MySQL)尤其对数据的归并排序做了多种优化,使得我们常规的归并排序能够充分的并行,充分利用CPU、内存和IO的资源。在并行创建索引之后的合并步骤,也使用了一套简化的算法,正确处理各种索引结构的场景。 # 支持的索引和场景 GaussDB(for MySQL)的并行创建索引功能,目前支持的索引为Btree二级索引。对于virtual index二级索引,将会在不久的将来提供全面的支持,而MySQL的spatial index和fulltext index不在该并行创建索引覆盖范围内。 特别要注意的是,主键索引的创建目前也是不支持并行的,因此如果一个并行创建索引的SQL语句包含创建主键索引,或者前面提及的spatial index与fulltext index,那么客户端将会收到一个告警,提示该操作不支持并行创建索引,同时该语句会采用单线程创建索引的方式执行完成。 从SQL语句的角度,如前所述,创建索引可以采用不同的算法,由于COPY算法(ALGORITHM=COPY)不是采用批量插入的方式,因此不会受益于该并行创建索引优化。而对于INPLACE算法,如果创建索引用的是非rebuild的方式,都可以受益于该优化;一旦需要使用rebuild的方式创建索引,因为涉及到主键索引的建立,将无法使用并行创建索引的算法。 # 示例 下面我们通过几个实例来了解一下如何使用并行创建索引算法加快创建速度,以及我们的条件约束是如何生效的。 1、我们使用sysbench的表,表内有1亿条数据 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/17/104249vvlkscshiuxzjsvr.png) 2、在该表的k字段建索引,采用社区默认单线程,耗时146.82s ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/17/104256jqwmjqlyvhq0kb5k.png) 3、通过设置innodb_rds_parallel_index_creation_threads = 4启用4个线程建索引,可以看到建索引耗时38.72s,速度提升3.79倍。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/17/104304xxanpkukqudyeqza.png) 4、假设我们要修改主键索引,虽然指定了多线程,但是会收到一个warning,实际上只能通过单线程建索引 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/17/104314qvogmsmxb5yxkuvw.png) # 注意事项 首先对innodb_rds_parallel_index_creation_threads这个参数进行一下说明,它控制了系统中所有并行DDL可以使用的总线程数,取值范围是[1-128]。该参数取值为1表示使用原始的单线程创建索引,取值为N,表示接下来的DDL使用N个线程创建。如果一个DDL使用了100个线程在执行,那么另外一个也要使用并行的DDL且最多只能使用剩下的28个线程;而如果128个线程都被并行DDL语句占用了,新来的DDL只能走原始的单线程创建的逻辑。 虽然该并行创建索引加快了索引的创建速度,但是在具体使用场景下,还是需要有审慎的评估。我们知道在并行算法应用之后,该DDL对硬件资源的使用会尽可能的充分,这也意味着其它操作就得不到太多的资源了。因此,针对不同的场景需要具体地分析,它决定了我们如何创建索引。 对于迁移场景,由于这时候还没有任何业务接入,用户希望尽快完成所有索引的创建,因此可以尽量设置多线程数,比如我们是16核规格的实例,那么我们就可以把并行线程的数量指定为16,加速完成操作。 如果是用户业务运行阶段要创建索引,我们还是不希望DDL操作,对正在运行的业务如DML操作等有太多的影响。因此,这时候创建索引可以指定相对少一些的线程数量,比如2-4(或者根据CPU规格以及负载决定,同时不鼓励并发地执行多个DDL操作)。这样既能相对地加速创建索引的进程,也能保证DML的正常进行。 综上所述,GaussDB(for MySQL)支持了并行创建索引,通过缩短创建索引使用的时间,很好地解决了客户关切的两类问题,提升了客户的体验。但技术无止境,在创建索引领域,还有其它的问题需要我们优化解决,例如如何减少创建索引步骤对IO的影响等等。我们后续会针对这些点进行优化,给客户带来更多的惊喜。 目前,华为云GaussDB(for MySQL) 并行创建索引优化功能已上线,欢迎大家前往华为云官网体验:https://www.huaweicloud.com/product/gaussdb_mysql.html
  • [生态空间] 【DWS产品】【统计信息收集功能】DWS是否有类似Oracle的DML/TRUNCATE监控以便获取数据变化情况
    Oracle的监控方式: DBA_TAB_MODIFICATIONS视图(基表为SYS.MON_MODS_ALL$)记录了从上次收集统计信息以来表中DML操作变化的数据量,包括执行INSERT、UPDATE和DELETE影响的行数,以及是否执行过TRUNCATE操作。另外,DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO可以将内存(SGA)中的数据快速刷新到数据字典SYS.MON_MODS_ALL$中。SYS.MON_MODS_ALL$只是最终表,中间还有一个过渡表SYS.MON_MODS$,这两个表的结构是完全相同的。从Oracle 10g开始,当初始化参数STATISTICS_LEVEL的值被设置为TYPICAL或ALL时,默认会启用Oracle中表监控的特性,此时,Oracle会默认监控表上的自上一次分析(Last Analyzed)之后发生的INSERT、UPDATE、DELETE以及表是否被TRUNCATE截断操作,并且Oracle数据库的SMON后台进程每15分钟会将这些操作数量的近似值(内存SGA中记录的DML操作)写入到数据字典基表MON_MODS$中(从SGA中写入到MON_MOD$),但是这个写入过程只持续1分钟,因此,可能不是所有DML操作都会记录到MON_MODS$表中。在默认情况下,数据库每天会将SGA中表的DML操作和MON_MODS$表的数据合并(MERGE)到MON_MODS_ALL$中,也可以通过DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO来手动写入到MON_MODS_ALL$中。在收集统计信息后,MON_MODS_ALL$表中信息将被清空。 问题: DWS中也可以开启 autoanalyze ,它们是基于什么数据来做的,也有monitor DML/TRUNCATE的功能 ? 什么时候触发写入类似的monitor表 ?
  • [运维管理] GaussDB(DWS)资源池并发数控制
    【功能模块】资源池【操作步骤&问题现象】1、配合好资源池和相关配置,给对应用户10个并发,但是没有显示效果【截图信息】1.创建资源池并绑定用户2.用用户u01去做查询3.查询还是有100个在运行要体现出这10个并发的设置,得怎么测试?谢谢!
  • [开发应用] 【GAUSSDB A 8.0.0】【数据权限管控】
    已有Admin,user1,user2三个用户,请问如何将Admin用户所创建的表,按某一字段列赋权给不同的使用用户。如下数据表:Admin用户所创建表table:name   usage张三      user1李四      user1王五      user2------------------------------------------------------------????????通过哪种方式处理使现??????-------------------------------------------------------------user1用户查询table结果:name   usage张三      user1李四      user1user2用户查询table结果:name   usage王五      user2
总条数:2746 到第 页
上滑加载中