论文部分内容阅读
[摘 要]在热轧进行批量生产后,由于数据量增加、系统本身一些缺陷、热轧二级服务器暴露出一些影响正常生产的问题。如模型失效、响应速度慢、时区错误、数据库内存无法分配等。
[关键词]热轧二级服務器;数据库服务器
中图分类号:TP13 文献标识码:A 文章编号:1009-914X(2015)17-0054-01
1 故障说明
在热轧进行批量生产后,由于数据量增加、系统本身一些缺陷、热轧二级服务器暴露出一些影响正常生产的问题。如模型失效、响应速度慢、时区错误、数据库内存无法分配等。
2.故障分析、结论和措施
2.1 数据库服务器问题
2.1.1 原因分析:
当前使用的操作系统和数据库结合后对使用的内存有一个分配标准,那就是无论你给服务器加了多少内存,操作系统给数据库分配的内存不能超过2G(配置文件可以改为2G以上,但不建议更改,可能会出现其它一些未知问题)。
2.1.2 结论:
我们在使用过程中经常出现无法访问数据库情况,经查询是当连接服务器的会话数过多时(超过400),对数据库访问就会出现问题,严重时候出现模型计算失效,轧制停止。经分析问题为服务器内存太小引起。
2.1.3 措施:
发现会话数过多时(超过400):关闭一些正在使用IFIX客户端软件,重新启动,因为IFIX长期使用后,会占用较多的会话数。
3.1 二级数据库时区问题
3.1.1 故障现象:
数据库记录时间和当前时间相差一天。
3.1.2 代码:
create or replace FUNCTION "FNCONVERT_GMT_TO_LOCAL" (v_TARGET_DATETIME IN TIMESTAMP) RETURN VARCHAR2 IS
SECONDSDIFF NUMBER(5,0);
LOCALDATETIME TIMESTAMP;
v_c_LOCALDATETIME VARCHAR2(40);
BEGIN
--SECONDSDIFF := (TO_NUMBER(TO_CHAR(SYSDATE, 'SSSSS')) - TO_NUMBER(TO_CHAR(SYS_EXTRACT_UTC(SYSTIMESTAMP), 'SSSSS'))) ;
SECONDSDIFF := 28800 ;
SELECT CAST(v_TARGET_DATETIME + (SECONDSDIFF/86400) AS TIMESTAMP) INTO LOCALDATETIME FROM DUAL;
v_c_LOCALDATETIME := TO_CHAR(LOCALDATETIME,'YYYY-MM-DD HH24:MI:SS') ;
RETURN v_c_LOCALDATETIME ;
--RETURN LOCALDATETIME ;
END FNCONVERT_GMT_TO_LOCAL ;
3.1.3 原因分析:
此段代码是数据库中的一个函数,用来把格林威治时间转换为北京时间,由于TMEIC程序时区转换的错误,按TMEIC转换后,它所指的时间和北京时间不一致,所以造成查询不出来或者错误。
4.1 TEMIC存储过程耗费服务器资源问题
4.1.1 故障现象:
当执行此存储过程时,服务器CPU和内存耗费巨大,造成其它应用程序访问速度变慢甚至无法正常访问数据库数据,严重时影响整个系统数据交换。
4.1.2 代码:
create or replace PROCEDURE sp_TrimHistory(maxRecs IN int) IS
t timestamp;
c int;
v_i_KeepDataInDays1 INT;
v_i_KeepDataInDays2 INT;
v_i_lineNums INT;
BEGIN
-- Variable to set the Time in days to keep the data
v_i_KeepDataInDays1 := 1; -- Days
v_i_KeepDataInDays2 := 3; -- Days
v_i_lineNums := 10000;
SELECT count(*) INTO c FROM ALARMHISTORY;
IF c > v_i_lineNums THEN
DELETE FROM ALARMHISTORY
WHERE AlarmTime < SYSDATE - v_i_KeepDataInDays2;
DELETE FROM ALARMHISTORY
WHERE GRP = 'SQL'
AND IDX = 1
AND AlarmTime < SYSDATE - v_i_KeepDataInDays1
AND ARGUMENTS LIKE
'%Ingot in Furnace, But not Existing in HSM L2 Database. Ingot%';
END IF;
SELECT count(*) INTO c FROM ALARMHISTORY;
IF c > maxRecs THEN
SELECT AlarmTime
INTO t
FROM (SELECT AlarmTime
FROM (SELECT AlarmTime
FROM ALARMHISTORY
ORDER BY AlarmTime DESC)
WHERE ROWNUM <= maxRecs
ORDER BY AlarmTime ASC)
WHERE ROWNUM = 1;
DELETE FROM ALARMHISTORY WHERE AlarmTime < t;
END IF;
END;
4.1.3 措施:
报警数据表不到1分钟进行一次查询,里面存放的数据大约有10万条,查询时又进行了排序等工作,严重消耗内存和CPU。更改后的存储过程,在使用原存储过程进行管理前,通过时间,类型,数量等方式已经将数据减小到原存储过程所设置的极限,从而做到尽量不让它使用原先管理方案,从而大大降低内存和CPU的消耗。(具体程序见上述代码)。
[关键词]热轧二级服務器;数据库服务器
中图分类号:TP13 文献标识码:A 文章编号:1009-914X(2015)17-0054-01
1 故障说明
在热轧进行批量生产后,由于数据量增加、系统本身一些缺陷、热轧二级服务器暴露出一些影响正常生产的问题。如模型失效、响应速度慢、时区错误、数据库内存无法分配等。
2.故障分析、结论和措施
2.1 数据库服务器问题
2.1.1 原因分析:
当前使用的操作系统和数据库结合后对使用的内存有一个分配标准,那就是无论你给服务器加了多少内存,操作系统给数据库分配的内存不能超过2G(配置文件可以改为2G以上,但不建议更改,可能会出现其它一些未知问题)。
2.1.2 结论:
我们在使用过程中经常出现无法访问数据库情况,经查询是当连接服务器的会话数过多时(超过400),对数据库访问就会出现问题,严重时候出现模型计算失效,轧制停止。经分析问题为服务器内存太小引起。
2.1.3 措施:
发现会话数过多时(超过400):关闭一些正在使用IFIX客户端软件,重新启动,因为IFIX长期使用后,会占用较多的会话数。
3.1 二级数据库时区问题
3.1.1 故障现象:
数据库记录时间和当前时间相差一天。
3.1.2 代码:
create or replace FUNCTION "FNCONVERT_GMT_TO_LOCAL" (v_TARGET_DATETIME IN TIMESTAMP) RETURN VARCHAR2 IS
SECONDSDIFF NUMBER(5,0);
LOCALDATETIME TIMESTAMP;
v_c_LOCALDATETIME VARCHAR2(40);
BEGIN
--SECONDSDIFF := (TO_NUMBER(TO_CHAR(SYSDATE, 'SSSSS')) - TO_NUMBER(TO_CHAR(SYS_EXTRACT_UTC(SYSTIMESTAMP), 'SSSSS'))) ;
SECONDSDIFF := 28800 ;
SELECT CAST(v_TARGET_DATETIME + (SECONDSDIFF/86400) AS TIMESTAMP) INTO LOCALDATETIME FROM DUAL;
v_c_LOCALDATETIME := TO_CHAR(LOCALDATETIME,'YYYY-MM-DD HH24:MI:SS') ;
RETURN v_c_LOCALDATETIME ;
--RETURN LOCALDATETIME ;
END FNCONVERT_GMT_TO_LOCAL ;
3.1.3 原因分析:
此段代码是数据库中的一个函数,用来把格林威治时间转换为北京时间,由于TMEIC程序时区转换的错误,按TMEIC转换后,它所指的时间和北京时间不一致,所以造成查询不出来或者错误。
4.1 TEMIC存储过程耗费服务器资源问题
4.1.1 故障现象:
当执行此存储过程时,服务器CPU和内存耗费巨大,造成其它应用程序访问速度变慢甚至无法正常访问数据库数据,严重时影响整个系统数据交换。
4.1.2 代码:
create or replace PROCEDURE sp_TrimHistory(maxRecs IN int) IS
t timestamp;
c int;
v_i_KeepDataInDays1 INT;
v_i_KeepDataInDays2 INT;
v_i_lineNums INT;
BEGIN
-- Variable to set the Time in days to keep the data
v_i_KeepDataInDays1 := 1; -- Days
v_i_KeepDataInDays2 := 3; -- Days
v_i_lineNums := 10000;
SELECT count(*) INTO c FROM ALARMHISTORY;
IF c > v_i_lineNums THEN
DELETE FROM ALARMHISTORY
WHERE AlarmTime < SYSDATE - v_i_KeepDataInDays2;
DELETE FROM ALARMHISTORY
WHERE GRP = 'SQL'
AND IDX = 1
AND AlarmTime < SYSDATE - v_i_KeepDataInDays1
AND ARGUMENTS LIKE
'%Ingot in Furnace, But not Existing in HSM L2 Database. Ingot%';
END IF;
SELECT count(*) INTO c FROM ALARMHISTORY;
IF c > maxRecs THEN
SELECT AlarmTime
INTO t
FROM (SELECT AlarmTime
FROM (SELECT AlarmTime
FROM ALARMHISTORY
ORDER BY AlarmTime DESC)
WHERE ROWNUM <= maxRecs
ORDER BY AlarmTime ASC)
WHERE ROWNUM = 1;
DELETE FROM ALARMHISTORY WHERE AlarmTime < t;
END IF;
END;
4.1.3 措施:
报警数据表不到1分钟进行一次查询,里面存放的数据大约有10万条,查询时又进行了排序等工作,严重消耗内存和CPU。更改后的存储过程,在使用原存储过程进行管理前,通过时间,类型,数量等方式已经将数据减小到原存储过程所设置的极限,从而做到尽量不让它使用原先管理方案,从而大大降低内存和CPU的消耗。(具体程序见上述代码)。