• [维护宝典] GaussDB (DWS)如何抛出具体哪一行报错
    业务侧提交了一个存储过程, 过程中有对数据进行插入的作业, 执行出现报错:numeric field overflow ·报错只有该打印,没有详细的信息,如下:无法定位到具体是哪条数据导致了该问题。cn日志里没有详细的报错信息,dn日志里可以找到具体报错的行,但是业务侧无法访问后台,查找日志不方便,希望在报错中就打印出对应的问题数据。可以使用pg_exception_context打印具体报错,如下:create or replace procedure proasdeclarev_context TEXT;begininsert into tn select * from t;exceptionwhen others thenget stacked diagnosticsv_context = pg_exception_context;dbms_output.put_line(SQLCODE);dbms_output.put_line(SQLERRM);dbms_output.put_line(v_context);end/出现报错时,可以打印出异常的数据行:
  • [实践系列] GaussDB(DWS) 【中找出那些表没有做过analyze】
    DWS中使用analyze语句可收集与数据库中表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC中。查询优化器会使用这些统计数据,以生成最有效的执行计划。建议在执行了大批量插入/删除操作后,例行对表或全库执行analyze语句更新统计信息。通过以下语句可以找出数据库中哪些语句没有统计信息,并生成执行脚本:SELECT 'analyze ' || '"' || n.nspname || '"' || '.' || '"' || c.relname || '";'  FROM pg_class c  LEFT JOIN pg_namespace n    ON n.oid = c.relnamespace WHERE c.relkind = 'r' ::"char"   and pg_stat_get_last_analyze_time(c.oid) is null   and c.oid > (16384 - 1);示例:对一张表执行analyze后,再次查询如下:
  • [实践系列] GaussDB(DWS) 【判断表是否做过update或者delete操作】
    DWS中有两种情况需要关注表是否做过update及delete操作:(1)对表频繁做update或者delete操作会产生大量的磁盘页面碎片,从而逐渐降低查询的效率,需要将磁盘页面碎片回复并交换操作系统,即vacuum full 操作,这时候需要找出那些表做过update;(2)判断一张表是否是维度表,是否可以从Hash表变更为复制表,可以查看这张表是否做过update或delete,如果做过update或delete操作,则不可以修改为复制表;可以通过以下脚本找出那些表做过update及delete操作:analyze +tablename;SELECT      n.nspname , c.relname,     pg_stat_get_tuples_deleted(x.pcrelid) as deleted,pg_stat_get_tuples_updated(x.pcrelid) as updatedFROM pg_class cINNER JOIN pg_namespace n ON n.oid = c.relnamespaceINNER JOIN pgxc_class x ON x.pcrelid = c.oidWHERE c.relkind = 'r' and c.relname='tablename' ;eg:
  • [实践系列] GaussDB(DWS) 【TopSql 抓取方法】
    (1)前提条件:GUC参数enable_resource_track为on (默认为on)GUC参数resource_track_level为query或operator(默认为query)GUC参数enable_resource_record为on(默认为off)GUC参数resource_track_duration小于作业执行时间(默认为60s)(2)创建统计函数:CREATE OR REPLACE FUNCTION public.stream_count(text)         RETURNS integer         LANGUAGE sql         IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE      AS $function$           select ((length($1) - length(replace(replace($1, 'Streaming(type: B', ''), 'Streaming(type: R', ''))) / length('Streaming(type: B'))::int      $function$ CREATE OR REPLACE FUNCTION public.subplan_count(text)         RETURNS integer         LANGUAGE sql         IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE      AS $function$         select ((length($1) - length(replace($1, 'SubPlan', '')) )::int / length('SubPlan'))::int      $function$(3)TopSql 历史数据数据转储表:create table topsql_xxxxxxxx DISTRIBUTE BY HASH(queryid) as select t.dbname,t.count,t.avg_duration,t.count*t.avg_duration as totaltime,t.max_duration,t.stream_count,t.subplan_count,t.queryid,p.query,p.query_plan from (selectsubstr(query,1,60) as sub_query, dbname, count(1) as count,round(avg(duration),2) as avg_duration,max(duration) as max_duration,public.stream_count(query_plan) as stream_count,public.subplan_count(query_plan) as subplan_count,max(queryid) as queryidfrom pgxc_wlm_session_infowhere dbname = 'database'and start_time >'xxxx-xx-xx xx:xx:xx'and finish_time < 'xxxx-xx-xx xx:xx:xx'group by 1,2,6,7having (count >0  ) )t left join pgxc_wlm_session_info p on t.queryid = p.queryid;(4)导出到csv文件copy (select * from topsql_xxxxxxxx) to '{filepath}/topsql_xxxxxxxx.csv' with(format 'csv',header 'on',encoding 'gbk');说明:上述SQL中标红的内容需根据现场情况修改:dbname :待抓取TopSql的数据库start_time :抓取记录开始时间finish_time:抓取记录截止时间
  • [实践系列] GaussDB(DWS)【维度表修改为复制表提升查询性能】
            GaussDB for DWS时分布式框架,支持两种分布方案:分布方式描述适用场景Hash 表数据通过Hash方式散列到集群中的所有DN上。数据量较大的事实表。Replication集群中每一个DN都有一份全量表数据。维度表、数据量较小的事实表。在表设计时应尽量避免数据shuffle。shuffle,是指在物理上,数据从一个节点,传输到另一个节点。shuffle占用了大量宝贵的网络资源,减小不必要的数据shuffle,可以减少网络压力,使数据的处理本地化,提高集群的性能和可支持的并发度。Hash表数据分布在各个DN上,在进行关联查询时,如果关联字段无法作为分布列字段,则会产生shuffle,因此对于维度表、数据量较小的事实表,使用复制表减少参与计算的线程数和减少网络数据交互,提升查询性能。eg:hash表执行计划如下:复制表改造前有stream算子,单条语句执行时间670.56ms。把功能科目的基础数据表fasp_t_pubexpfunc改成复制表后,执行计划中没有stream算子,执行时间提升为534.53ms。在并发场景下,对于小表来说,stream的压力是主要瓶颈,把hash表改成复制表,并发场景下性能提升明显。
  • [实践系列] GaussDB(DWS) 【视图依赖的表名发生rename后DWS与ORACLE的不同表现】
    1.GaussDB For DWS中测试结果:(1)定义一个表t1及视图v1,t1表插入数据:create table t1(a int);create view v1 as select * from t1;insert into t1 values(1);(2)t1表rename为t2表alter table t1 rename to t2;(3)查询视图v1定义及数据select * from v1;select pg_get_viewdef('v1');如上图,在DWS中,视图依赖的表发生rename后,变更的表名会同步至视图定义。1.Oracle中测试结果:(1)定义一个表t1及视图v1,t1表插入数据create table t1(a int);create view v1 as select * from t1;insert into t1 values(1);(2)t1表rename为t2表alter table t1 rename to t2;(3)查询视图v1定义及数据select * from v1;select dbms_metadata.get_ddl('VIEW','V1') from dual;如上图,在Oracle中,视图依赖的表发生rename后,变更的表名不会同步至视图定义。
  • [其他] 【安装】安装双机OMS,主OMS成功,备启动时提示NTP超时
    问题背景与现象安装双机oms,主oms安装成功,安装备oms时报启动ntp超时。原因分析在主备oms上分别执行sh /opt/huawei/Bigdata/om-0.0.1/sbin/status-oms.sh,如果看不到对端oms状态信息,基本可以确认是HA证书过期导致。可通过下面命令查看证书的有效时间以及系统当前时间(GMT时间可以等效于UTC时间)。openssl x509 -in /opt/huawei/Bigdata/om-0.0.1/security/certHA/root-ca.crt -noout –dates。可以看到系统当前时间已经超过证书有效期,可以确定是HA证书过期导致。解决办法使用omm用户在主OMS节点上执行以下命令生成证书私钥(安装场景root安装可以使用root用户执行,非root安装则该步骤可放在执行preset之后):openssl genrsa -aes256 -passout pass:$password -out $path/root-ca.pem 2048其中$password为证书密码,$path为存放私钥和证书文件的路径,下同。例如:openssl genrsa -aes256 -passout pass:Changeme_123 -out /home/omm/root-ca.pem 2048生成root-ca.pem(如果是升级/新安装场景,务必保证 $password是FI证书的默认密码Changeme_123)。使用omm用户在主OMS节点上执行以下命令生成证书(安装场景root安装可以使用root用户执行,非root安装则该步骤可放在执行preset之后):openssl req -passin pass:$password -new -x509 -days $days -key $path/root-ca.pem -sha256 -out $path/root-ca.crt -subj "/C=$country/ST=$state/L=$city/O=$company/OU=$organize/CN=$commonname/emailAddress=$email"其中,$password为生成私钥时传入的密码,$days为证书的有效期天数,$path为临时存放证书的路径,均可根据实际需要进行配置。例如:生成证书openssl req -passin pass:Changeme_123 -new -x509 -days 36500 -key /home/omm/root-ca.pem -sha256 -out /home/omm/root-ca.crt -subj /C=CN/ST=guangdong/L=shenzhen/O=huawei/OU=IT/CN=HADOOP.COM/emailAddress=FI@huawei.com这样,就在 /home/omm目录下生成了root-ca.crt和root-ca.pem两个文件。使用安装/升级用户进入到升级/安装包解压后的安装目录(假定用户已经将升级/安装包解压);cd升级(安装)包所在目录/FusionInsight/software/om/package解压缩om-0.0.1.tar.gz,执行下列命令:tar -zxvf om-0.0.1.tar.gz替换预置的HA证书。手工将上面步骤1中生成的root-ca.crt和root-ca.pem拷贝到解压缩后的om-0.0.1/security/certHA/目录下,替换掉目录下原有文件,注意文件权限不变。替换完成后,重新压缩om-0.0.1.tar.gz,注意重新压缩后权限不变。cd升级包(安装包)所在目录/FusionInsight/software/om/packagerm -f om-0.0.1.tar.gztar -czvf om-0.0.1.tar.gz om-0.0.1rm -rf om-0.0.1操作完成以后,可以按照正常的流程进行升级或安装操作。
  • [其他] 【安装】安装OMS失败,报错安装logman失败
    问题背景与现象安装OMS失败,提示Failed to install logman。原因分析查看安装日志“/var/log/Bigdata/controller/scriptlog/install.log”,报如下错误:[2016-06-17 09:58:35] DEBUG configDiskManager end [install.sh(configDiskManager):1997](113506)[2016-06-17 09:58:35] INFO Start oms. [install.sh(start_oms):843](113506)start HA successfully.[2016-06-17 09:59:30] DEBUG Config crontab. [install.sh(config_crontab):348](113506)[2016-06-17 09:59:30] INFO Succeed to start oms. [install.sh(start_oms):864](113506)[2016-06-17 09:59:30] INFO The script to install logman. [install.sh(install_logman):1367](113506)You (omm) are not allowed to use this program (crontab)See crontab(1) for more informationget crontab file failed.You (omm) are not allowed to use this program (crontab)See crontab(1) for more informationget crontab file failed.[2016-06-17 09:59:30] ERROR Failed to install logman. [install.sh(main):1832](113506)ERROR:Failed to install logman.[2016-06-17 09:59:30] ERROR Installation failed. For details about the error, see the log file /var/log/Bigdata/controller/scriptlog/install.log. [install.sh(post_install):443](112780)cron配置文件被修改,导致没权限修改crontab文件,导致logman安装失败。解决办法修改“cron.deny.bak”为“cron.deny”,卸载后重新安装。 
  • [其他] 【安装】操作系统shared_buffers参数的值大于kernel.shmmax
    问题背景与现象安装OMS失败。原因分析查看gaussDB安装日志“/var/log/gaussdbinstall.log”。操作系统shared_buffers参数的值大于kernel.shmmax。解决办法编辑“/etc/sysctl.conf”文件,设置“kernel.shmmax”的值,格式如下。kernel.shmmax = value建议将shmmax的值设置为物理内存大小的一半。可用如下命令查看本机的物理内存:grep MemTotal /proc/meminfo显示类似如下的信息:MeMTotal: 6088240 kB则kernel.shmmax的大小可设置为6088240*1024/2=3117178880。kernel.shmmax = 3117178880执行如下命令,使SUSE Linux启动时自动读取内核参数。/sbin/chkconfig boot.sysctl on执行如下命令使内核参数生效。/sbin/sysctl -p 
  • [其他] 【安装】root用户属组不对导致安装gaussdb失败
    问题背景与现象安装OMS失败。原因分析查看“/var/log/Bigdata/omm/oms/install_oms.log”。手动执行报错的命令:可以看出是root用户的属组不对。解决方法修改root用户属组id为0,重新安装OMS。
  • [其他] 【安装】系统信号量不足导致安装gaussdb失败
    问题背景与现象安装OMS失败。原因分析查看gaussDB安装日志(/var/log/gaussdbinstall.log),发现是初始化db失败,进而查看初始化db日志(/home/ommdba/gs_initdb-2016-06-13_162302.log):日志中显示创建信号量失败,原因为超过了操作系统信号量资源的使用限制。【检查方法】:执行如下命令,查看操作系统信号量资源的限制参数:sysctl kernel.semkernel.sem = 2500 32000 1000 128其中第4个数据对应系统内核的SEMMNI参数,该参数用于控制整个Linux系统中信号集的最大数量。就GaussDB而言,这个参数至少应该为(max_connections / 16 + 1)。解决办法增大操作系统信号量资源的限制参数值(具体大小需要业务根据自己的资源使用来确定):修改内核配置文件"/etc/sysctl.conf",在此文件的任意位置增加如下参数:kernel.sem = 2500 32000 1000 1280Suse系统执行如下命令,使SUSE Linux启动时自动读取内核参数。(Red Hat系统可忽略)/sbin/chkconfig boot.sysctl on执行如下命令使内核参数生效。/sbin/sysctl -p修改后重新安装OMS即可。
  • [其他] 【安装】&quot;/etc/hosts”配置不对导致安装OMS失败
    问题背景与现象安装OMS失败,查看安装日志,提示could not translate host name "localhost" to address。原因分析查看安装日志“/var/log/Bigdata/controller/scriptlog/install.log”,报如下错误:从日志中可以看出是无法解析localhost的IP地址导致连接数据库失败,进而导致安装OMS失败。这是因为“/etc/hosts”中没有配置localhost 127.0.0.1。解决办法在“/etc/hosts”中增加一行localhost 127.0.0.1,卸载后重新安装。
  • [其他] 【安装】安装备OMS时启动ntp失败
    问题背景与现象主OMS已安装成功,安装备OMS时启动ntp失败,提示Wait for ntp to startup timeout。===================================Welcome================================================== STEP 1 Preparing components...The ws_float_ip (10.103.100.106) already exists on the network.  Is it used on the active OMS HA? (y/n):yThe om_float_ip (10.103.100.104) already exists on the network. Is it used on the active OMS HA? (y/n):y=== STEP 2 Install packages. It may take several minutes. Please wait...    Waiting for ntp to satrtup.............................................................ERROR:Wait for ntp to startup timeout.ERROR:Installation failed.            Please run the following script to delete useless files:           /opt/huawei/Bigdata/om-0.0.1/inst/uninstall.sh原因分析分析NTP日志(/var/log/ntp.log),发现端口不同拒绝连接,提示connect refused。检查防火墙设置:chkconfig -lst | grep fire。解决办法先卸载已安装的备OMS。关闭防火墙设置。chkconfig SuSEfirewall2_setup offchkconfig SuSEfirewall2_init off重新安装备OMS,安装成功。
  • [其他] 【安装】安装OMS提示解密失败
    问题背景与现象安装OMS失败,报Failed to get omm db password。原因分析查看安装日志(/var/log/Bigdata/controller/scriptlog/install.log),报如下错误:java.security.InvalidKeyException: Illegal key size or default parameters        at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1011)        at javax.crypto.Cipher.implInit(Cipher.java:786)        at javax.crypto.Cipher.chooseProvider(Cipher.java:849)        at javax.crypto.Cipher.init(Cipher.java:1213)        at javax.crypto.Cipher.init(Cipher.java:1153)        at org.wcc.framework.util.encrypt.PasswordUtil.decryptByAes256(PasswordUtil.java:180)        at org.wcc.framework.util.encrypt.PasswordUtil.decryptByAes256(PasswordUtil.java:146)        at com.omm.encrypt.DecryptCommandMain.decryptCommandLine(DecryptCommandMain.java:71)        at com.omm.encrypt.DecryptCommandMain.main(DecryptCommandMain.java:130)[2014-12-09 10:58:47] ERROR Failed to get omm db password. [installcontroller.sh(main):788](12851)2.解密失败的原因最常见的就是JDK的版本不匹配,大数据FusionInsight系统会在omm用户下安装JDK。如果在安装以前root用户下已经有JDK或者JAVA_HOME环境变量,可能会导致安装FusionInsight失败。解决办法请卸载root用户下的JDK和JAVA_HOME。可以通过在root用户下执行env |grep JAVA_HOME查看。如果存在,请在“/root/.bash_profile”文件中去除JAVA相关环境变量,或者彻底删除安装的JDK,或者清除“/etc/profile”中的JAVA_HOME相关变量。
  • [其他] 【安装】安装Ldap错误导致OMS安装失败
    问题背景与现象OMS安装失败。原因分析查看日志,提示Failed to install ldap,具体内容如下:[2014-12-10 05:52:56] ERROR cleanUpCMD=/opt/huawei/Bigdata/om-0.0.1//ldapserver/ldapserver/ldapserver_wrap.sh [installLdap.sh(cleanup):173](31064)ERROR:cleanUpCMD=/opt/huawei/Bigdata/om-0.0.1//ldapserver/ldapserver/ldapserver_wrap.sh[2014-12-10 05:52:56] ERROR Failed to install ldap.scriptName=/ldapserver/ldapserver/ldapserver_wrap.sh,postinstallCMD=/opt/huawei/Bigdata/om-0.0.1//ldapserver/ldapserver/ldapserver_wrap.sh [installLdap.sh(postinstall):212](31064)ERROR:Failed to install ldap.scriptName=/ldapserver/ldapserver/ldapserver_wrap.sh,postinstallCMD=/opt/huawei/Bigdata/om-0.0.1//ldapserver/ldapserver/ldapserver_wrap.sh[2014-12-10 05:52:56] ERROR The input parameter is incorrect. [installLdap.sh(install):256](31064)ERROR:The input parameter is incorrect.[2014-12-10 05:52:56] ERROR install server failed [installLdap.sh(main):296](31064)ERROR:install server failed[2014-12-10 05:52:56] ERROR Failed to install the ldap [installLdap.sh(main):331](31064)2.查看“/var/log/Bigdata/oldapserver/ldapserver_install.log”,发现如下异常。2014-12-10 05:52:56 566 linux-126 SlapdServer ERROR ldap server rpm is not installed!2014-12-10 05:52:56 569 linux-126 SlapdServer ERROR ldap server rpm is not installed!解决办法缺少Ladp的相关rpm包,需要执行preinstall来进行包的添加。
总条数:2552 到第
上滑加载中