CIMISS数据环境中数据入库滞后常见问题的解决
发布时间:2021-07-11T05:43:12.575Z  来源:《现代电信科技》2021年第5期作者:许竹霞孔小怡徐娟付杰
[导读] 重命名在Oracle数据库中只存储索引表,实际数据存放在GPFS共享文件系统中。用户通过统一的数据访问接口(MUSIC)访问数据。
(甘肃省气象信息与技术装备保障中心甘肃兰州  730020)
摘要:全国综合气象信息共享平台(CIMISS)作为甘肃省唯一的气象数据环境,承担气象数据的收集分发、加工处理、入库及服务等。用户通过CIMISS统一的气象数据服务接口(MUSIC)实时获取数据进行应用,但在实际的CIMISS运行过程中,由于资料收集延迟、入库异常、入库滞后等问题,经常影响气象预报业务、气象公众服务等业务的开展。针对此类情况,本文主要通过对引起气象数据入库滞后及不入库的常见问题进行梳理,及时定位问题并总结出解决办法,提高了实时气象数据的及时性及可靠性。
关键词:CIMISS;数据入库滞后;BUFR数据;解决措施
1 CIMISS系统总体数据流程
全国综合气象信息共享平台(China Integrated Meteorological Information Sharing System,简称CIMISS)是国家气象信息中心2009年启动建设的数据管理和服务平台,集气象数据收集、加工处理、存储管理和共享于一体,运行于国家级和31个省级气象数据中心,管理国家级或省级数据中心全部可收集的国内外气象资料和业务产品[1]。CIMISS系统主要包括数据收集与分发(CTS)、加工处理(DPC)、存储管理(SOD)、业务监控(MCP)及标准化的接口服务(MUSIC)五个子系统。
气象原始观测资料由台站直接上传至省局CIMISS系统的收集与分发系统(CTS),通过CTS收集处理(打包、文件名检查、格式检查等)后发送至国家局、数据加工处理系统(DPC)、本地共享服务器及省际共享用户等。DPC负责气象数据加工处理的工作,处理后的数据入库存储在SOD系统中,对于结构化数据解码后存储在关系型Oracle数据库中,非结构化数据通过DPC解码、重命名在Oracle数据库中只存储索引表,实际数据存放在GPFS共享文件系统中。用户通过统一的数据访问接口(MUSIC)访问数据。
图1  甘肃省CIMISS系统总体数据流程
oracle10g程序异常终止2 CIMISS数据库现状及存在问题
甘肃省CIMISS系统于2016年正式业务化后,数据入库率为国家气象信息中心每月考核指标,数据入库率的高低不仅仅是业务工作评判的标准,而且直接影响到对外提供服务的能力。2019年,依据气象数据集约化的理念,全省气象业务系统全部对接CIMISS数据库。随着用户访问量提升,CIMISS数据库暴露出来的问题日益显著。造成数据入库滞后及不入库的原因主要有:(1)台站上传数据所归属的表分区不存在,比如:台站上传的30天以前的大量历史数据的分区已清除、实时分区未及时创建;(2)标准格式数据(BUFR)入库程序自身局限性;(3)接口用户的暴力检索等。
3数据库表分区不存在导致入库滞后
分区技术[2]是Oracle数据库为简化一些数据量庞大的表的管理推出的重要技术,将表和索引细分为较小、较容易管理的段,从而使数据库管理员能够用分而治之的手段进行数据管理,具有相当大的灵活性。其优势[3-4]在于:提高数据访问的速率;每个分区之间的数据操作不会相互影响,将每个分区的数据分割开来,最大程度地保证了所存储数据的安全性和可靠性。但是在数据入库时,分区不存会导致影响实时数据入库。
甘肃省CIMISS数据库中存储了实时历史的气象海量数据,随着表中数据量的不断增大,查询数据的速度会变得非常缓慢,因此在数据库设计时根据不同的气象数据(分钟数据、小时数据、日数据等)对数据库表的设计也不同。对于观测及访问频率较高的分钟数据,CIMISS数据库在设计时采用小时分区表,每小时都会自动添加下一时次的分区;小时数据及日值数据表以日为分区表,每天凌晨业务空闲时段添加次日的分区表。其他类型的资料分区思路是一致的。当数据通过全国气象通信系统CTS分发至DPC解码入库时,如果表分区不存
在,数据库表在自动创建分区的时候造成表相关的游标[5](cursor)全部失效,而CIMISS数据库存在按小时的自动间隔分区,每个小时都会自动添加新的分区,而新增分区会导致正在创建分区的表在library cache中的对象全部需要重新解析,造成解析锁争用,从而影响数据入库。此外,数据库设置有自动清除历史数据的脚本,删除大量历史分区也将影响数据入库。一般出现该问题的表是创建分区比较频繁的表,即分钟数据表。
以地面分钟降水表SURF_WEA_CHN_PRE_MIN_TAB为例,该表存储了全国2427个国家级气象自动站的每分钟数据及甘肃、青海、陕西、宁夏、四川5省共9300多个区域站的5分钟加密数据。结合甘肃省实际的CIMISS存储空间,地面分钟数据表的存储时效设置为30天。每天通过自动脚本定时清除30天以前的数据,即删除分区表。
分钟历史数据并不提供有效的气象服务,额外增加了删除历史数据的工作量,对数据库入库性能造成一定影响。因此,需要通过修改DPC系统的BUFR入库程序限制历史数据的入库,根据业务需求入库程序对入库资料的时间限制设置为48小时以内的数据(包括地面分钟、地面小时、辐射分钟、辐射小时、酸雨日数据)自动处理入库。修改的相关程序文件和参数文件,包括:/space/cimiss_BCLZ/app/bin/dpc/dbmerge_bufr2/bin/running目录下的程序文件dpc_bufr_file、dpc_bufr_msg,/space/cimiss_BCLZ/app/bin/dpc/dbmerge_bufr2/cfg下的参数文件l、l、l、l、l。此外,对于特殊情况,如需对48小时以外的数据入库,需要系统维护人员手工将原始文件生成消息之后入库,跳过入库程序时间限制的环节入库。
此外,有时会因为诸多原因Oracle数据库表没有提前创建分区,大量实时数据的涌入,业务量大的时候,新增分区会造成阻塞。此时,采用提前手动创建分区的方法,步骤如下:
(1)检索出CIMISS数据库中以小时为分区的所有数据表,SQL查询语句为:select?owner,table_name,INTERV AL?from? dba_part_tables?where?owner='USER_SOD'AND?INTERV AL?like?'%HOURS%'。
(2)编写脚本配置文件table,将需要提前创建小时分区的表都配置在table文件中,创建自动分区的脚本从table表中按顺序读取需要创建分区。
(3)编写创建自动分区的脚本auto_add_part.sh后,停止与数据库连接的DPC系统、SOD系统以及MUSIC系统的应用,三个应用系统涉及到的应用进程比较多,分别停各个系统的应用比较麻烦且耗时。因此,选择业务比较空闲时候,直接在数据库服务器上使用命令srvctl stop scan_listener关闭SCAN监听;并且在数据库各节点机(甘肃的CIMISS基础库为db01、db02)上kill掉所有应用进程:ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCAL=NO|awk '{print $2}'|xargs kill -9;执行提前分区脚本sh auto_add_part.sh,创建15张数据表的30天的分区大概用时40分钟;分区创建完成后,重启SCAN监听srvctl start scan_listener,应用会自动连接数据库。
4入库进程异常导致入库滞后
CIMISS系统中解码入库程序常会出现进程掉或僵死的情况,导致数据入库异常的因素主要有入库程序不完善、数据接口访问用户暴力检索等。
(1)入库程序不完善:
全国数据标准化(BUFR)格式于2019年12月12日单轨运行,正常情况下,BUFR数据入库时间比资料观测时间晚24秒左右,但在运维过程中发现地面BUFR分钟数据入库时间字段(D_IYMDHM)比观测时间字段(D_DATETIME)晚2-3分钟,延时最高时可到达4分钟以上。以2019年12月16日的情况为例,图2为2019年12月16日07时30分至08时40分(国际时)兰州站(52889)地面分钟数据入库时间与数据
观测时间的差值情况,自08时00分之后D_IYMDHM比D_DATETIME平均滞后2-3分钟。查询日值发现出现入库程序僵死,但是数据竟然滞后入库。此类情况是由于数据库出现异常中断后,入库进程未设置重连机制,修改入库程序,增加对数据库重连的机制可解决此问题。
图2  兰州站(52889)地面分钟数据入库时间与观测时间差值(2)数据接口访问用户暴力检索
甘肃省气象数据统一服务接口的WEB用户有130个、API账户有74个用户,MUSIC接口用户每日访问数据次数为45万次左右、访问数据量达350G左右,汛期该数据还会上浮很多。接口用户高并发访问CIMISS数据时对数据库造成的压力是不可忽视的,通常在汛期有天气过程时数据库僵死的概率更高。运维中遇到的情况是数据库性能低下、数据入库缓慢,用topas产看数据库服务器的CPU使用率持续在99%左右,省局运维人员可通过停止接口服务应用恢复CPU使用率。
接口用户对分钟数据的获取各自指定了程序策略,比如在获取地面分钟数据时,数据同步策略是每5分钟一次,但是由于数据偶尔会出现入库滞后的问题,用户会对每批数据的同步设定重复同步3-5次,这就会严重影响其他用户的访问效果。针对此类用户就需要省局运维人员与用户沟通自定义一些接口,将用户的全量同步变为增量同步。
5 总结
本文通过日常的运维经验对CIMISS数据库入库滞后的常见问题进行分析并提出解决办法,但是影响数据入库的原因众多,文中的处理办法也存在一定的局限性,在今后的运维工作中进行更加全面的考虑和研究。
参考文献:
[1]熊安元,赵芳,王颖,等.全国综合气象信息共享系统的设计与实现[J].应用气象学报,2015,26(4):500-512.
[2]申红雪,刘育熙. Oracle10g表分区技术管理[J].科技信息,2008,000(020):44,98.
[3]王三蕊.ORACLE数据库优化之分区技术[J].电子技术与软件工程,2016,12:182-183.
[4]王时绘,李正君.Oracle分区技术研究及实现[J].科技广场,2011,09:86-89
[5]张练兴,马明磊.ORACLE游标中的多表UPDATE行锁讨论[J].江西师范大学学报(自然科学版),2005,29(6):489-491.
[7]柳玲玲,张正阳. CIMISS新疆气象数据统一访问接口[J]. 沙漠与绿洲气象,2015(9):117.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。