• [实践系列] DWS获取当前日期在当月的自然周数(周一开始)的自定义函数
    RT.  有业务需求需要获取当前日期在当月的周数,且是按周一为一周的开始的。搜索网上postgres或者oracle的办法,都没有直接获取的办法,于是自建一个自定义函数获取。  to_char(日期,'W')能返回类似的周数,但一周的开始是按当月1日的周几开始,即select to_char('2022-10-08'::date,'W');等当月8日的结果永远返回2(第2周),因此无法使用to_char直接使用。 此处提供简单的逻辑办法创建自定义函数 逻辑如下,以2022年10月为例,1,2日为第1周,而3号周一为第2周的开始。 在减去第1周的2天后,每7天为1周;假设当前日期是2022-10-08 周六,此处的公式为向上取整数((8号 - 2天)/ 7天) + 1 ,结果是2,意思是8号是本月的第二周。  最后根据当月1号是周几,得出以下办法: 向上取整数((当前几号 - (7 - 1号周几 + 1))/ 7) + 1SQL如下:CREATE OR REPLACE FUNCTION public.weekofmonth(varchar) RETURNS int LANGUAGE sql STRICT NOT FENCED SHIPPABLE AS $$ /* 向上取整((当前几号-(7- 1日周几 + 1)) / 7 ) + 1 */ select ceil((extract(day from $1::date) - (7 - (case when extract(dow from (to_char($1::date,'YYYY-MM')||'-01')::date) = 0 then 7 else extract(dow from (to_char($1::date,'YYYY-MM')||'-01')::date) end) + 1)) / 7)::int + 1; $$ ; 使用样例: postgres=# select weekofmonth('2022-05-01'::date);  weekofmonth  -------------            1 (1 row)  postgres=# select weekofmonth('2022-10-31'::date);  weekofmonth  -------------            6 (1 row) 
  • 多字段联合索引最左匹配原则
    ↵建立联合索引时会遵循最左前缀匹配的原则,即最左优先,检索数据时从联合索引的最左边开始匹配,DEMO:对列a、列b 和列c 建一个列存表主键多字段索引 primary_key(a,b,c,d)联合索引 pk_abcd 实际建立了(a)、(a,b)、(a,b,c)索引。SELECT * FROM test WHERE a=1 AND b=2 AND c=3上面这个查询语句执行时会依照最左前缀匹配原则,检索时会使用索引(a,b,c)进行数据匹配。2、注意索引的字段可以是任意顺序的,如:SELECT * FROM test WHERE a=1 AND b=2SELECT * FROM test WHERE b=2 AND clo1=1这两个查询语句都会用到索引(a,b),创建联合索引的规则是首先会对联合合索引的最左边的,也就是第一个字段a的数据进行排序,在第一个字段的排序基础上,然后再对后面第二个字段b进行排序。其实就相当于实现了类似 order by a,b这样一种排序规则。mysql兼容模式下,修改分布列,需要增加guc参数配置如下:
  • [维护宝典] 表的访问统计方法
    【问题描述】 一个表的访问,只有这两种scan(视图pg_stat_user_tables) 吗?如果这两种scan都是0, 说明这个表从创建后就没有被访问 ?有什么办法能够找到数据库内从来没有被访问过的表,需要清理这些没用的表【问题版本】811【解答】1、访问的可以参考这个(对应视图pg_stat_user_tables),但前提是seq_scan中必须有出现顺序扫描才算,idx_scan中必须有索引扫描才算,这个访问数量比实际访问数量要少,因为可能还有除了顺序扫描和索引扫描的其它访问,目前能参考的就这两个数据,没其它的了,有这两个数据,就说明有顺序扫描或索引扫描方式访问了 2、 813版本中,global_table_stat 可以看3、目前811这个版本,这个视图pg_stat_user_tables,是统计查,增删改使用pg_stat_all_tables视图,通过last_data_changed时间字段,只要数据变动就会记录时间,可以两个视图结合起来看4、开审计注:pg_stat_all_tables视图还有个问题,就是CN或集群重启了信息就不见了,所以可以运行一段时间再看里面的信息。目前还是只有这两个视图可以看;开审计,此方法,代价估计有点大,审计量可能会很大,主要是存储空间膨胀会很验证,因为select语句全部都被记录
  • [维护宝典] cpu一直高
    【问题版本】8.0.0【问题描述】 群数据库多个节点CPU高查询时快时慢【问题根因】集群监控显示对应时间点hz_ygnet用户有上线新业务查询语句,导致cpu使用率增高【规避措施】暂停此语句观察主机cpu是否明显下降,确认后再想办法优化业务语句或者业务表【定位过程】 1.用户有关联资源池,有对用户做资源管控,2.用户关联资源池之后,现在版本都是对复杂作业生效,简单作业不生效,如果简单作业比较多也会cpu比较高,此现象正常,3.cgroup是否有挂载失败的节点,有挂在失败节点,就会有cpu高的可能,执行一下gs_ssh -c "gs_cgroup -P"grep null ,没有输出没有挂载失败4. 开启动态负载管理的情况下,通过视图 select * from pgxc_session_wlmstat; 查看作业类型,简单作业跑满情况下,cpu会高,这个里边statement_mem是估算内存,5. 在执行SQL的过程中,某个线程占用CPU过高。TopSql里找下执行时间长的sql语句6. 定位cpu高的语句可参考:https://support.huaweicloud.com/trouble-dws/dws_09_0059.html7、查找作业是否有排队:https://bbs.huaweicloud.com/blogs/2220178、通过现场监控cpu高的sql语句,脚本工具也抓取到了同样的语句【结论】经排查,集群主机cpu从9/8日15:00开始从20%上升到70%+到今日,集群监控显示对应时间点hz_ygnet用户有上线新业务查询语句,一直持续并发执行并且占据集群执行时间top10,新业务语句导致cpu高
  • [维护宝典] 集群非均衡
    【问题描述】集群每天会非均衡几次,需要定位主备切换原因 【问题影响】需要客户一直在控制台进行主备切换【排查过程】1、    查看cma、cms日志,日志中显示phony dead times(5:0),实例5次假死,同时被kill掉 2、    cms日志中,实例被kill时,日志中显示the memory usage(other=1199,dynamic=1199,total=17484),other内存+dynamic共享内存超过70%,内存占用高,超过70%(usage_threshold为70) 3、    查询pg_shared_memory_detail后发现共享内存totalsize为9G多,确认为共享内存高导致的 【结论】根据客户时序表入库数据量,调小内存占用:将tag_cache_max_number值调为原来的十分之一,后续凌晨界面再次出现集群非均衡状态,登录后台查看,实例都发生切换,看日志报错和 上次一样:实例被kill时,共享内存上下文的memcontext占用高,非均衡原因为内存溢出,溢出原因是时序表得tag列选择不合理,导致内存不足,拉通客户,优化表结构(tag列得选取)tag hash内存缓存个数值改成根据max process memory计算的值,这样能够根据机器配置初始化一个合理的内存空间
  • [维护宝典] (二)An I/O error occurred while sending to the backend
    通过↵【问题描述】Oracle到 DWS 的,执行truncate,报错:An I/O error occurred while sending to the backend java.net.SocketTimeoutException: Read timed out【分析及排查】查看cn日志,发现truncate 表的时候获取锁超时(20分钟)【结论】truncate 表的时候获取锁超时(20分钟)导致的,客户端表现为socket5分钟超时报错;因truncate操作需请求8级锁,与其他锁冲突,建议排查其他业务持锁情况,不可与truncate操作并发
  • [维护宝典] (一)An I/O error occurred while sending to the backend
    【问题描述】dbc连接报错,An I/O error occurred while sending to the backend【排查过程及分析】1、按报错案例https://bbs.huaweicloud.com/forum/thread-93472-1-1.html排查( CN进程异常重启、session超时、人为kill session、 LVS中virtual router id冲突),全都不符合,报错堆栈cause by socket closed怀疑与业务代码有关。 2、排查业务代码,业务语句启3个线程获取连接,执行语句,再关闭连接;代码中使用了静态Connection对象,导致并发getconnection时有可能出现两个线程拿到同一个connection语句执行,在执行的语句被执行完的语句关闭连接。
  • [技术干货] 熟悉GAUSSDB A(DWS)集群节点gs_profile目录
    作为一名GAUSSDB A(DWS)数据库的忠实粉丝,我们不断在掌握它精简干练和实用的技能,在日常维护或巡检作业中经常面对一些问题需要分析日志,来帮我们得到想要的结论。下面一起来了解下gs_profile的知识吧!cd $GAUSSLOG能看到bin  cm  gs_obs  gs_profile  om  pg_audit  pg_log有这么多目录,那么gs_profile具体是做什么用的呢!我看先进到gs_profile看看,可以看到生成的文件postgresql-2022-10-11_153909.prf,该文件为二进制格式,需要二进制程序特殊场景才能看到!一、日志生成格式:"postgrs-年-月-日_号.prf"二、日志生成原理:业务读写IO都会产生记录,读写分两类,一类为本地磁盘的IO记录,包括读、写、list文件;一类为远端读写的记录,当前只有OBS/HDFS两种;生成该文件主要用于辅助定位IO相关问题,根据日志中记录的访问大小、访问次数和时间来判断或界定某个时间段是否存在IO相关异常。三、日志文件数量:很多小伙伴不理解,为什么目录下会有很多这种文件,有时候会占用日志磁盘,那么这个就跟业务息息相关了,根据原理,看相关IO操作是否频繁。如果生成的较为频繁,很大程度代表业务量大,读写IO次数较多。四、日志回收机制:如果我们熟悉集群日志回收机制可以很快理解,对于云上,集群按照不压缩不回收的机制,默认保留90天,但依赖日志空间大小参数限制;对于线下,FI页面有总日志大小限制,回收机制类似云上。五、日志关闭:其实这个模块的日志是可以关闭的,不会影响任何业务,参考命令:gs_guc reload -Z coordinator -Z datanode -N all -I all -c "plog_merge_age = 0"六、日志清理:    6.1、查找31天前日志     gs_ssh -c 'find /var/log/Bigdata/mpp/omm/gs_profile -mtime +30 -type f -name "*.prf" -o -name "*.zip" -o -name "*.prf.gz"|wc -l'      6.2、删除31天前日志     gs_ssh -c 'find /var/log/Bigdata/mpp/omm/gs_profile -mtime +80 -type f -name "*.prf" -o -name "*.zip" -o -name "*.prf.gz" |xargs rm'       6.3、确认31天日志均删除     gs_ssh -c 'find /var/log/Bigdata/mpp/omm/gs_profile -mtime +30 -type f -name "*.prf" -o -name "*.zip" -o -name "*.prf.gz"|wc -l'    6.4、云上和线下压缩格式不一样,记得替换命令七、新813版本已进行深度优化,可以按照关注点指定模块,进行统计,从而减少gs_profile生成文件的数量。通过上面的知识,大家应该对gs_profile有综合性的认识,如果大家有任何问题可以随时留言,谢谢!
  • [SQL] 执行计划 A-time很小Total runtime比较长、Planner runtime时间很长
    【问题现象】业务打印explain performance时发现 A-time时间很短,但是需要执行很长时间才能返回计划。【问题原因】计划生成时间比较长即 Planner runtime字段对应的时间比较大,导致语句总体时间变长。【排查过程】打印执行计划查看耗时比较久的部分。一般如果A-time比较小,就需要查看 Planner runtime时间。【解决方法】如果Planner runtime比较大,可以会话级调小join_collapse_limit参数.
  • [问题求助] dws的where多个条件的时候,过滤顺序是什么
    dws的where多个条件的时候,过滤顺序是什么?先左后右,还是先右后左?
  • [热门活动] 【直播回放】10月25日晚19点 深度解析集群高可用设计及监控告警,现在回帖互动报名,华为手环、鼠标、云宝公仔多重好礼等您拿~
    为帮助您更好地了解和使用华为云数仓GaussDB(DWS)产品,本次介绍数据库集群高可用设计及监控告警。直播回放:cid:link_1讲师PPT见附件~参与互动华为手环、鼠标、云宝公仔等好礼等您来拿~一、直播看点1.GaussDB(DWS)高可用部署 -- 业务连续性的守护者和扳道工2.GaussDB(DWS)监控告警 -- 集群健康的心率计和观察员二、参与互动,好礼等您领报名参加本次直播;直播间抽奖:观看直播参与互动抽奖参与GaussDB(DWS)免费沙箱实验,并在本帖留言使用感受互动赢好礼:本主题贴跟帖盖楼,留言“玩转PB级数仓集群设计”在GaussDB(DWS)论坛上发帖互动(包括但不限于直播收获、问题求助、博文分享、数仓产品体验感受、产品优化建议等);在华为云社区分享与直播内容相关的博文,并在本帖回复文章链接。       发文版块链接: cid:link_3      以上互动方式参与一种或多种均可~
  • [问题求助] 请问GaussDB A8或者DWS如何查看一个数据库,所有表的最后更新时间?
    请问GaussDB A8或者DWS如何查看一个数据库,所有表的最后更新时间?
  • [生态空间] copy导入命令,如何导入整个文件夹下的所有文件
    copy public.table1 from '/srv/BigData/mppdb/data/dev/table1.txt' using delimiters e'\x01';使用copy命令导入文件到表中。目前只测试成功了单个文件导入。现在我想导入整个dev文件夹下的所有文件,使用通配符的方式,没有成功。copy public.table1 from '/srv/BigData/mppdb/data/dev/*' using delimiters e'\x01';请问如何导入?
  • [其他] gds连接报错ERROR: The peer GDS has performed an orderly shutdown on current connection with error "Operation now in progres
    【问题现象】gds连接报错ERROR: The peer GDS has performed an orderly shutdown on current connection with error "Operation now in progress".【问题原因】访问主机不在gds允许连接的白名单内【排查过程】1.启动GDS时开启日志功能查看报错(-l /opt/bin/gds/gds_log.txt指定日志路径) /opt/bin/gds/gds -d /input_data/ -p 192.168.0.90:5000 -H 10.10.0.1/24 -l /opt/bin/gds/gds_log.txt -D 2.重新调用查询或重启应用 3.查看日志报错信息 2022-10-14 11:57:01.116 226932 MT LOG: refused the connection from "192.168.0.91:43748". It was disallowed by the Secure IP Range Setting. 即192.168.0.91未在允许访问白名单内【解决方法】启动gds是使用参数选项-H指定业务主机ip 如 -H 192.168.0.91/24
  • [其他] 快照一直在创建中
    快照一直在创建中 版本:dws811.5排查步骤:1.登录rms库查看rds_cluster_backup  表 select * from rds_cluster_backup  where name='快照名字'  and clusterid='集群id'\G;搜索结果是快照状态还在执行中2.从步骤1中的查询结果中获取backupjobid    select * from taskmgr_task where job_id = '2c9081c082197ed101821e5d5e690097'\G;查看快照执行到哪一步了  是否有失败查询结果快照任务正常3.登录实例节点搜索 roach进程  看快照进程是否再跑若快照进程在跑;则快照仍在创建中;不想继续创建则可以强制停止备份进程。若快照进程不在;roach进程已经跑完了但是快照一直还在创建中的情况;这个应该是中间pod重启或者升级,导致job刚执行完上一个task,没有拉起来。进度卡住了  规避方法:job直接改成失败,快照也改成失败。taskmgr_job,rds_cluster_backup,清空rds_action  
总条数:2746 到第 页
上滑加载中