柔情似水 发表于 2015-1-16 22:39:30

MSSQL网页编程之library cache lock 的办理案例

在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:cache|办理
下战书,营业职员呈报,实行任何和zzss03201281cs_no表有关的操纵城市hang住,包含desczzss03201281cs_no,也会hang在那边

第一感到是锁了,因而,我看看锁

SQL>select*fromv$lockwhereblock=1;

norowsselected

SQL>
SQL>select*fromgv$lockwhereblock=1;

norowsselected

SQL>



再看看守候事务:

SQL>coleventfora30
SQL>l
1*selectevent,p1,p2,sidfromv$session_waitwhereevent=librarycachelock
SQL>/

EVENTP1P2SID
------------------------------------------------------------
librarycachelock1.3835E+191.3835E+1932

SQL>/

EVENTP1P2SID
------------------------------------------------------------
librarycachelock1.3835E+191.3835E+1932

SQL>/

EVENTP1P2SID
------------------------------------------------------------
librarycachelock1.3835E+191.3835E+1932

。。。



奇异,怎样这么多librarycachelock?

SQL>showuser
USERis"SYS"
SQL>execdbms_system.set_ev(32,27506,10046,12,);

PL/SQLproceduresuccessfullycompleted.

Elapsed:00:00:00.10
SQL>l
1SELECTd.VALUE
2||/
3||LOWER(RTRIM(i.INSTANCE,CHR(0)))
4||_ora_
5||p.spid
6||.trctrace_file_name
7FROM(SELECTp.spid
8FROMv$mystatm,v$sessions,v$processp
9WHEREm.statistic#=1ANDs.SID=m.SIDANDp.addr=s.paddr)p,
10(SELECTt.INSTANCE
11FROMv$threadt,v$parameterv
12WHEREv.NAME=thread
13AND(v.VALUE=0ORt.thread#=TO_NUMBER(v.VALUE)))i,
14(SELECTVALUE
15FROMv$parameter
16*WHERENAME=user_dump_dest)d
SQL>/

TRACE_FILE_NAME
--------------------------------------------------------------------------------
/ora9i/app/oracle/admin/csmisc/udump/csmisc2_ora_2708.trc

Elapsed:00:00:00.10
SQL>



SQL>selectxidusn,object_id,session_id,locked_modefromv$locked_object;

XIDUSNOBJECT_IDSESSION_IDLOCKED_MODE
-----------------------------------------
1435202313
1518303

SQL>colobject_nameformata30
SQL>selectowner,object_name,statusfromdba_objectswhereobject_id=35202;

OWNER
------------------------------
OBJECT_NAME
--------------------------------------------------------------------------------
STATUS
-------
SYS
PLAN_TABLE
VALID


SQL>

这个工具明显不是我们存眷的。


SQL>l
/1*selectowner,object_name,statusfromdba_objectswhereobject_id=18
SQL>

OWNEROBJECT_NAMESTATUS
-------------------------------------------------------------------
SYSOBJ$VALID

就是这个工具弄得,估量是开辟职员非常加入一些历程

SQL>c/18/30
1*selectserial#,username,command,lockwait,status,schemaname,osuser,machine,terminal,program,modulefromv$sessionwheresid=30
SQL>/

SERIAL#USERNAMECOMMANDLOCKWAITSTATUS
--------------------------------------------------------------------------
SCHEMANAMEOSUSER
------------------------------------------------------------
MACHINE
----------------------------------------------------------------
TERMINALPROGRAM
------------------------------------------------------------------------------
MODULE
------------------------------------------------
17921PUBUSER0ACTIVE
PUBUSERreport16
cs_dc02

SERIAL#USERNAMECOMMANDLOCKWAITSTATUS
--------------------------------------------------------------------------
SCHEMANAMEOSUSER
------------------------------------------------------------
MACHINE
----------------------------------------------------------------
TERMINALPROGRAM
------------------------------------------------------------------------------
MODULE
------------------------------------------------
sqlplus@cs_dc02(TNSV1-V3)
SQL*Plus


SQL>selectb.usernameusername,b.terminalterminal,b.programprogram,b.spid
2fromv$sessiona,v$processb
wherea.PADDR=b.ADDRanda.sid=&sid;
3Entervalueforsid:30
old3:wherea.PADDR=b.ADDRanda.sid=&sid
new3:wherea.PADDR=b.ADDRanda.sid=30

USERNAMETERMINAL
---------------------------------------------
PROGRAMSPID
------------------------------------------------------------
ora9iUNKNOWN
oracle@cs_dc02(TNSV1-V3)835

很明显,是因为report16用户实行了某些DDL操纵,然后,非常加入,形成体系的锁(估量和bug有关,有待考据)
SQL>host
ora9i@cs_dc02:/ora9i/app/oracle/product/920/rdbms/admin>ps-ef|grep835
ora9i46194617114:48:18pts/te0:00grep835
ora9i83510Jan5?0:01oraclecsmisc2(LOCAL=NO)
ora9i@cs_dc02:/ora9i/app/oracle/product/920/rdbms/admin>kill835
ora9i@cs_dc02:/ora9i/app/oracle/product/920/rdbms/admin>exit

SQL>selectxidusn,object_id,session_id,locked_modefromv$locked_object;

XIDUSNOBJECT_IDSESSION_IDLOCKED_MODE
-----------------------------------------
1435202313

SQL>

kill失落这个历程后,成绩办理了。(遗憾的是,忘了看看这个家伙实行的sql了,呵呵)
SQL>desczzss03201281cs_no
ERROR:
ORA-04043:objectzzss03201281cs_nodoesnotexist


SQL>desczzss03201281cs_no
ERROR:
ORA-04043:objectzzss03201281cs_nodoesnotexist


SQL>

SQL>execdbms_system.set_ev(32,27506,0,0,);

PL/SQLproceduresuccessfullycompleted.

SQL>

检察trace文件,:

公然大批的wait:

WAIT#1:nam=librarycachelockela=316p1=-4611686013647472824p2=-4611686013691747544p3=1301
WAIT#1:nam=librarycachelockela=326p1=-4611686013647472824p2=-4611686013691747544p3=1301
WAIT#1:nam=librarycachelockela=398p1=-4611686013647483736p2=-4611686013691747816p3=1301
WAIT#1:nam=librarycachelockela=552p1=-4611686013647483736p2=-4611686013691747816p3=1301
WAIT#1:nam=librarycachelockela=330p1=-4611686013649700264p2=-4611686013691715248p3=1301
WAIT#1:nam=librarycachelockela=141p1=-4611686013649700264p2=-4611686013691715248p3=1301
WAIT#1:nam=librarycachelockela=223p1=-4611686013647485472p2=-4611686013691762016p3=1301
WAIT#1:nam=librarycachelockela=93p1=-4611686013647485472p2=-4611686013691762016p3=1301
WAIT#1:nam=librarycachelockela=223p1=-4611686013595934816p2=-4611686013642107320p3=1301








Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。

第二个灵魂 发表于 2015-1-19 20:48:04

如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。

精灵巫婆 发表于 2015-1-28 10:29:45

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

爱飞 发表于 2015-2-5 14:45:24

如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。

若天明 发表于 2015-2-12 08:20:24

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

分手快乐 发表于 2015-3-3 01:33:45

还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。

乐观 发表于 2015-3-18 00:18:25

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

变相怪杰 发表于 2015-3-25 08:19:09

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
页: [1]
查看完整版本: MSSQL网页编程之library cache lock 的办理案例