ORACLE & VS 2005 性能问题



我正在使用 c# (VS 2005(、框架 2.0 和 ORACLE 11 评估数据输入应用程序中的性能问题。该应用程序被120多人在线使用。基本上任务很简单,只验证论文中的工资数据,然后将其写入数据库。对于有效数据,用户最常在大型数据库(500万(中验证员工识别ID或名字或姓氏。有时在任务期间,应用程序会阻塞片刻(几秒钟到几分钟(,从而无法继续工作。这个问题缺乏生产力,并严重延误了工作规划。

应用程序(3 层:前端、中间层和后端(使用主表来验证数据,并使用网格视图来添加、修改或删除数据。目前,不可能进行IT改造。

第一个问题:我想知道使用视图而不是主表来减少开销和应用程序块是否是一种好的做法?

对搜索数据的查询包括:

要按员工 ID 搜索:

SELECT name FROM employees WHERE id = EmployeeID OR af = EmployeeID;

(只有id字段是PK,af字段对应于其他识别号,但没有每个人都有(

按名称搜索:

SELECT id, DECODE(complete_name, null, name_null) name, first_name, last_name, sex FROM employees WHERE name_null LIKE CONVERT(REPLACE'" + first_name.ToUpper() + "%" + last_name.ToUpper() + "%" + "','Ñ','N'),'US7ASCII')" OR name_null LIKE CONVERT(REPLACE'" + last_name.ToUpper() + "%" + first_name.ToUpper() + "%" + "','Ñ','N'),'US7ASCII')";

这两个查询是在函数中创建的,因此数据由需求返回。然后,数据在数据网格中向用户显示。

第二个问题:考虑到所提供的事实,是否有其他方法可以优化查询?

谢谢你的任何提示。

我认为您无法从应用程序端解决此问题,需要在数据库中寻找解决方案。 我建议在employees.name_null和 employees.af 上创建和测试索引。 如果您看到您提到的延迟,这可能是由于员工表上的全表扫描(而不是"阻塞"[可以根据下面的 SQL 检查阻塞锁](;您可以通过检查可疑慢速 SQL 的执行计划来检查这一点。

select * from
(
SELECT distinct inst_id "Inst Id"
, LPAD('>', (level-1)*2, '>') || NVL(s.username, '(oracle)') AS "Username" 
, TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS "Logon Time"
, s.osuser
, s.sid "Session Id"
, s.serial# "Sess Ser#"
, s.blocking_session "Session Id (Blocker)"
, s.blocking_instance "Inst Id (Blocker)"
, s.status "Sess Status"
, s.event "Event Name"
, s.sql_id
, (select max(sql_text) from gv$sqlarea sa where sa.sql_id = s.sql_id) sql_text
, s.module
, s.machine
, s.program
, s.lockwait
, level
FROM   gv$session s
where (sid, inst_id) in (select blocking_session, blocking_instance from gv$session) or blocking_session is not null
CONNECT BY PRIOR s.sid = s.blocking_session
START WITH s.blocking_session IS NULL
--order by  LPAD('>', (level-1)*2, '>') || NVL(s.username, '(oracle)') desc, blocking_Session
order by  (level-1)*2 , blocking_Session
)
where "Session Id" = nvl(:sid_blk, "Session Id") or "Session Id (Blocker)" = nvl(:sid_blk,"Session Id (Blocker)")
;

最新更新