MSSQL网站制作之SQL SERVER 2000体系供应的跟踪函数(二...
支持多线程,充分利用CPU资源server|函数SQLSERVER2000体系撑持的跟踪函数(二)BayaPavliashviliandKevinKline
http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28000409
fn_trace_getfilterinfo和fn_trace_geteventinfo
这些函数能够用来检索一个跟踪的元数据(这些函数的输入的寄义是含混的,假如你不熟习跟踪的事务标记符和过虑的列的标记符.你能够看看SQLSERVER的在线匡助“sp_trace_setevent”)
这2个函数都是将跟踪标记符作为独一的参数.fn_trace_getfilterinfo前往指定跟踪的过虑后的信息.举例:假定我们限定跟PUBS数据库,由于我们试图办理该数据库中一个运转很长工夫的查询的妨碍,我们能够以下运转该函数:
SELECT*FROM::fn_trace_getfilterinfo(1)
--Results:
columnIDlogical_operatorcomparison_operatorvalue
------------------------------------------------------
3506pubs
这个输入告知我们,我们指定的跟踪过虑是在列为35(数据库名)和没有利用逻辑操纵符("AND"or"OR")由于只要一个前提.对照操纵符是”LIEE”(=6)过滤的值是”PUBS”.
依据你使用过虑的范例,你能够改动对照操纵符.在很多案例中,你可使用LIKE或NOTLIKE.并且,假如你限定跟踪指定的处置或指定的数据库,那末你能够指定"=",">","","<",">=",or"<="等逻辑操纵符.
备注:假如你经由过程SQLSERVERProfiler工具创建一个跟踪,这个跟踪会主动增添一个过滤器,不包含经由过程Profiler本人发生给SQLSERVER的跟踪过滤语句.假如你喜好懂得Profiler工具,只需复杂的将过滤器设置为off.
fn_tracegeteventinfo能够前往一个跟踪的事务信息,有良多的跟踪事务你能够指定.你指定的事务越多,就会有更多的信息被收拾,因而要细心.我劝说人人要懂得每个事务的寄义而且选择那些和你办理成绩亲切相干的事务.fn_tracegeteventinfo是一个十分有效的函数,当你由于分歧的目标要摹拟运转多个跟踪.
要取得我们创建的跟踪事务的标记符,我们能够以下运转fn_tracegeteventinfo函数:
SELECTDISTINCTeventid
FROM::fn_trace_geteventinfo(1)
--Results:
eventid
-----------
12
37
40
41
42
43
这个了局告知我们,这个跟踪在检测以下事务:
・SQL:BatchCompleted―eventidof12
・SP:Recompile―eventidof37
・SQL:StatementStarting―eventidof40
・SQL:StatementCompleted―eventidof41
・SP:Starting―eventidof42
・SP:Completed―eventidof43
一样的,我们能够运转不异的函数,举行很小的修改就能够取得一个跟踪的一切数据列
SELECTDISTINCTcolumnidFROM::fn_trace_geteventinfo(1)
--Results:
columnid
-----------
1
10
11
12
13
14
16
17
18
这里我们搜集的典范数据用来功能调剂,包含一个查询的:注释数据,程序名,上岸名,SPID,延续工夫,入手下手停止工夫,读取,写进和CPU占用.
利用体系供应的UDFs
如今你指定一些体系供应的UDFs,你能够经由过程这些体系函数创建本人的自界说函数.个中有一个次要的限定是自界说函数没法挪用存储历程.可是自界说函数能够挪用其他的自界说函数.上面的UDF初始化fn_trace_geteventinfo函数,使了局更便利浏览:
CREATEFUNCTIONdbo.fn_GetTraceColumns(@trace_idINT)
RETURNS@TraceColumnsTABLE(
column_idINT,
column_nameVARCHAR(155)
)
AS
BEGIN
INSERT@TraceColumns(
column_id)
SELECTDISTINCTcolumnidFROM::
fn_trace_geteventinfo(@trace_id)
UPDATE@TraceColumns
SETcolumn_name=
CASEcolumn_id
WHEN1THENTextData
WHEN3THENDatabaseID
WHEN4THENTransactionID
WHEN6THENNTUserName
--similarstatementsomittedhere-seeSource
ELSEother
END
RETURN
END
Thisfunctioncanbeexecutedasfollows:
SELECT*FROMdbo.fn_getTraceColumns(3)
提要
在这篇文章中,我先容了SQLSERVER2000供应的十分有效的体系自界说函数,但愿人人喜好而且研讨其他的体系供应的自界说函数.
下载:TRACEUDFS.SQL
参考资本:
・284790INF:HowtoCreateaSQLServer2000Trace
・283786INF:HowtoMonitorSQLServer2000Traces
・270599BUG:fn_trace_gettableFunctionCannotReadRolloverFiles273972GeneratedbySQL
・ProfilerHOWTO:ProgrammaticallyLoadTraceFilesintoTables
・268591PRB:ODBCTracingtoSQL.LOGCanSlowSQLServerorConsumeAllDiskSpace
・307786INF:TracingtoNetworkDriveMayReduceSQLServerThroughput
・286239BUG:ReplayToolUsesLoginNameColumnforSETUSERInsteadofDatabaseUserNameColumn
・AndrewNovicks"FindOutWhatTheyreDoingwithfn_get_sql"―www.databasejournal.com/features/mssql/article.php/2189761
mysqld进程在一个写入当中被杀死;计算机的意外关闭(例如,如果计算机掉电);一个硬件错误。 但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右) 从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。 外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。 至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。 外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。 备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。 我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过! 分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
页:
[1]