一、SQL Profiler工具简介

SQL Profiler是一个图形界面和一组系统存储过程,其作用如下:

  • 图形化监视SQL Server查询;
  • 在后台收集查询信息;
  • 分析性能;
  • 诊断像死锁之类的问题;
  • 调试T-SQL语句;
  • 模拟重放SQL Server活动;

也可以使用SQL Profiler捕捉在SQL Server实例上执行的活动。这样的活动被称为Profiler跟踪。

  1、Profiler跟踪

  从开始=》所有程序=》Microsoft SQL Server 2008=》性能工具打开Profiler工具,也可以打开SQL Server Management Studio=》工具=》SQL Server Profiler。

  然后选择文件=》新建=》跟踪打开一个连接窗口,选择将要跟踪的服务器实例然后连接。打开如下“跟踪属性”对话框。

  

  如果有许多跟踪,可以提供一个跟踪名称来帮助在以后进行分类。不同的跟踪模板可帮助建立用于不同目的的跟踪。

  打开跟踪属性窗口后,单击“事件选择”选项卡,为跟踪提供更详细的定义。

  

  2、事件

  一个事件表现SQL Server中执行的各种活动。这些活动可以简单地分类为事件类,游标事件,锁事件,存储过程事件和T-SQL事件是常见的事件类。

  对于性能分析,主要对SQL Server上执行的各种活动的资源压力水平的事件感兴趣。资源压力主要包含如下内容:

  1. SQL活动涉及哪一类的CPU使用?
  2. 使用了多少内存?
  3. 涉及多少I/0操作?
  4. SQL活动执行了多长时间?
  5. 特定的查询执行的频率有多高?
  6. 查询面对哪类错误和警告?

  下面给出跟踪查询结束的事件:

事件类 事件 说明
Stored Procedures RPC:Completed RPC完成事件
  SP:Completed 存储过程完成事件
  SP:StmtCompleted 在存储过程中一条SQL语句完成事件
T-SQL SQL:BatchCompleted T-SQL批完成事件
  SQL:StmtCompleted 一条T-SQL语句完成事件

  RPC事件表示存储过程使用远程过程调用(RPC)机制通过OLEDB命令执行。如果一个数据库应用程序使用T-SQL EXECUTE语句执行一个存储过程,那么存储过程将被转化为一个SQL批而不是一个RPC。RPC请求通常比EXECUTE请求快,因为它绕过了SQL Server中的许多语句解析和参数处理。

  T-SQL由一条或多条T-SQL语句组成。语句或T-SQL语句在存储过程中也是单独和离散的。用SP:StmtCompleted或SQL:StmtCompleted事件捕捉单独的语句可能是代价很高的操作,这取决于单独语句的数量。假设系统中的每个存储过程包含且只有一条T-SQL语句。在这种情况下,完成的语句集合相当小。现在假定过程中有多条语句,而且这些过程中有些使用其他语句调用其他过程。收集所有这些额外的数据现在变成系统上非常厉害的负载。在生产机上一定要慎用。

  现在回到那个事件选择面板,只有已经被选择的事件才会被显示。如果想显示所有可供选择的事件,则只需选中“显示所有事件”单选框,要添加一个跟踪事件,在Event列中查找一个事件类下的事件,并单击其左边的检查框;要删除不需要的事件,取消选中的事件选择框。

  光分类就有好多的说:

  

  下面给出其他一些与性能诊断有关的事件:

事件类 事件 说明
Security Audit(安全审计) Audit Login(登录审计) 记录用户连接到SQL Server或断开连接时数据库的连接
Audit Logout(注销审计)
Sessions(会话) ExistingConnection(现有连接) 表示所有在跟踪开始之间连接到SQL Server的用户
Cursors(游标) CursorImplicitConversion(游标隐含转换) 表明创建的游标类型与所请求的类型个不同
Errors and Warnings(错误和警告) Attention(注意) 表示由于客户端撤销查询或者数据库连接破坏引起请求中断
Exception(异常) 表明SQL Server发生了异常
Execution Warning(执行警告) 表明在查询或存储过程执行期间出现了警告
Hash Warning(哈希警告) 表明hash操作发生了错误
Missing Column Statistics(列统计丢失) 表明优化器要求的确定处理策略用的类统计丢失
Missing Join Predicate(连接断言丢失) 表明查询在两个表没有连接断言情况下执行
Sort Warning(排序警告) 表明像SELECT这样的查询中执行排序操作没有合适的内存
Locks(锁) Lock:Deadlock(死锁) 标志着死锁的出现
Lock:Deadlock Chain(死锁链) 显示产生死锁的查询链条
lock:Timeout(锁超时) 表示锁已经超过其超时参数,该参数由SETLOCK_TIMEOUT timeout_perious(ms)命令设置
Stored Procedures(存储过程)    SP:Recompile(重编译) 表明用于一个存储过程的执行计划必须重编译,原因是执行计划不存在,强制的重编译,或者现有的执行计划不能重用

SP:Starting(开始)

SP:StmtStarting(语句开始)

分别表示一个SP:StmtStarting存储过程和存储过程中的一条SQL语句的开始。他们对于识别开始单因为一个操作导致Attention事件未能结束的查询很有用 
 Transactions(事物) SQLTransaction(SQL事务)  提供数据库事务的信息,包括事务开始/结束的时间、事务持续事件等信息 

  3、事件列

  事件以不同的特性(被称为数据列)来表现。数据列表现一个事件的不通特性,如事件的类、用于该事件的SQL语句、事件的资源开销以及事件来源。

数据列 说明
EventClass(事件类) 事件类型,如SQL:StatementCompleted
TextData 事件所用的SQL语句,如SELECT * FROM Person
CPU 事件的CPU开销(以ms表示),如对一个SELECT语句,CPU=100表示该语句执行100ms
Reads 为一个事件所执行的逻辑读操作数量。例如对一个SELECT语句,Reads=800表示该语句需要800次逻辑读操作
Writes 为一个事件所执行的逻辑写操作数量
Duration 事件的执行时间(ms)
SPID 用于该事件的SQL Server进程标识符
StartTime 事件开始的时间

  以上是常用的数据列,另外还有一些不太常用的数据列:

  •   BinaryData(二进制数据)
  •   IntegerData(整数数据)
  •   EventSubClass(事件子类)
  •   DatabaseID(数据库标识符)
  •   ObjectID(对象标识符)
  •   IndexID(索引标识符)
  •   TransactionID(事务标识符)
  •   Error(错误)
  •   EndTime(结束时间)

  列数据可以重新安排以符合你自己所喜欢的风格,要控制列数据的安放,单击组织列按钮,将打开如下对话框。可以单击Up和Down按钮修改列的位置,将列移入Groups意味着它将成为一个合计列。

  

  4、列筛选器

  除了为一个Profiler跟踪定义事件和数据列之外,还可以定义各种过滤条件。这些条件帮助缩小跟踪的输出,这往往是一个好主意。下面给出常用过滤条件列表。

事件 过滤条件实例 用处
ApplicationName(应用程序名称) Not like:SQL Profiler 过滤Profiler生成的事件。这是默认的行为
DatabaseID(数据库标识符) Equals:<ID of the database to monitor> 过滤特定数据库生成的事件。数据库ID:SELECT DB_IC('Northwind')
Duration(持续时间) Greater than or equal:2   对于性能分析,经常会为一个大的工作负载捕捉跟踪,在大的跟踪中,许多事件日志具有比所感兴趣更小的持续周期(Duration)。过滤这个事件日志,因为几乎没有可用于优化这些SQL活动的余地
Reads(读操作数) Greater than or equal"2 过滤读操作较小的事件
SPID

Equals:<Database users to monitor>

定位由特定的数据库用户发送的查询

  下面给出设置过滤列的方式:

  

  5、跟踪模板

  SQL Server Profiler可以用自定义事件、数据列和过滤器创建一个跟踪模板,然后定义一个新的跟踪,然后重用跟踪个模板来捕捉一个跟踪。定义新跟踪模板的过程类似于定义新跟踪,步骤如下:

  1. 创建一个新的跟踪。
  2. 和前面一样定义事件,数据列和过滤器。
  3. 从文件=》另存为菜单将跟踪定义保存为跟踪模板。

  SQL Server Profiler将自动将新的模板加入到其模板列表中。

  新建模板:

  

  保存模板:

  

  查看:

  

  6、跟踪数据

  定义了跟踪以后,单击运行按钮将开始捕捉事件并将其显示在屏幕上,可以看到一系列滚动事件,可以在我们称之为SQL TV的屏幕上看到系统的运行,可以像DVD播放机一样或多或少地控制跟踪,可以使用工具栏上的按钮暂停、开始和停止跟踪,甚至可以在工作室暂停跟踪并修改它。

  一旦完成了SQL Server活动的捕捉,就可以将跟踪输出保存为一个跟踪文件或一个跟踪表。保存到跟踪文件的跟踪输出是一个原生的格式,可以由Profiler打开以分析SQL查询。将跟踪的输出保存为一个表,也可以使Profiler在跟踪表上用SELECT语句来分析其中的SQL查询。

  具体的操作为 文件 =》 另存为 =》 跟踪表。选择你希望存入的的数据库和表,然后你就可以像普通表一样执行各种SQL查询。

二、跟踪的自动化

  Profiler GUI简化了Profiler跟踪的收集。不幸的是,这种简易性有其代价。Profiler工具捕捉的事件进入内存中的缓冲以便通过网络反馈给GUI。GUI依赖网络,网络流量可能降低系统的速度并导致缓冲被填满。这将在较小的程度上影响服务器的性能。进一步地,当缓冲被填满,服务器将开始丢弃事件以避免严重地影响服务器性能。

  1、使用GUI捕捉跟踪

  可以以两种方法两创建一个脚本化跟踪-手工或者使用GUI。在轻松地满足脚本的所有要求之间,最简易的方法就是使用Profiler工具的GUI,需要如下步骤:

  1. 定义一个跟踪;
  2. 单击文件=》导出=》脚本跟踪定义;
  3. 必须选择目标服务器类型, SQL Server2005/2008;
  4. 未文件命名,并保存它;

  这些不走将生成所有步骤跟踪并将其输出到一个文件所需的所有脚本命令。

  使用Management Studio手工启动新的跟踪:

  1. 打开文件;
  2. 使用系统的相关名称和路径替换InsertFileNameHere;
  3. 执行脚本,它将返回带有TraceId的单列结果集;

  可以通过SQL Agent自动化这个脚本的执行,甚至可以使用sqlcmd.exe使用程序从命令行运行这个脚本。不管使用哪种方法,这个脚本将启动跟踪。如果没有定义跟踪停止时间,就必须使用TraceId手工停止跟踪。

  2、使用存储过程捕捉跟踪

  查看上一节中定义的脚本,会看到以特定顺序条用的一系列命令:

  • sp_trace_create:创建一个跟踪定义;
  • sp_trace_setevent:添加事件和事件列到跟踪中;
  • sp_trace_setfilter:将过滤器应用到跟踪;

  一旦定义了SQL跟踪持续到跟踪被停止。因为SQL跟踪作为一个后端进程持续运行,Managerment Studio会话不需要保持打开。可以使用SQL Server内建函数fn_trace_getinfo确定正在运行的跟踪,查询如下:

SELECT * FROM ::fn_trace_getinfo(default);

  输出图:

  

  fn_trace_getinfo函数的输出中,不同的traceid的数量表示SQL Server上活动跟踪的数量。

第三列(value)表示跟踪是否正在运行(value=1)或者停止(value=0)。可以通过执行存储过程sp_trace_setstatus停止特定的跟踪,如traceid=1,如下所示:

EXEC sp_trace_setstatus 1,0;

在跟踪停止之后,它的定义必须执行sp_trace_setstatus关闭并且从服务器中删除,如下所示:

EXEC sp_trace_setstatus 1,2;

  为了验证跟踪成功地停止,重新执行fn_trace_getinfo函数,并确定该函数的输出不包含该traceid。

  这种技术所创建的跟踪文件的格式与Profiler创建的跟踪文件相同。因此,这种跟踪文件可以与Profiler创建的文件以相同的方式进行分析。

  使用前一小节所概述的存储过程捕捉SQL跟踪,避免了与Profiler GUI相关的开销。而且还比Profiler工具提供了管理SQL跟踪计划的更大灵活性。

三、结合跟踪和性能监视器输出

  如果自动化了性能监视器捕捉到文件,又自动化了Profiler数据捕捉到一个文件。它们覆盖相同的时间段,那么就可以在SQL Profiler GUI中一起使用它们。确定跟踪有StartTime和EndTime数据字段,按照以下步骤进行:

  • 打开跟踪文件(当然前提是你曾经 另存为=》跟踪文件);
  • 单击 文件=》 导入性能数据;
  • 选择导入的性能监视器文件;

  执行上面的操作将打开如下所示对话框,这里允许选择包含性能监视器计数器。

  选择了想要包含的计数器之后,单击OK按钮将一起打开Profiler和性能监视器数据。现在,可以开始一起使用跟踪数据和性能监视器数据。如果在顶部窗口选择一个时间,它将在性能 监视器中放置一条红线,显示数据中事件发生的时间。相反,可以单击性能监视器数据,表示那段 时间的事件将被选中。这些性能工作得很好,将可以在调整过程中定时使用它们以确认瓶颈和压力 点,并确定导致这些压力的特定查询。

四、SQL Profiler使用要点

  SQL Profiler使用建议如下:

  • 限制事件和数据列的数量;
  • 抛弃用于性能分析的启动事件;
  • 限制跟踪的输出大小;
  • 避免联机数据列排序;
  • 远程运行Proflier;

  1、限制事件和数据列

  在跟踪SQL查询时,可以通过过滤事件和数据列来决定哪些SQL活动应该被捕捉。选择更多的事件造成了大量的跟踪开销。数据列不会增加太多的开销,因为它们只是一个事件类的特性。因此,知道每个所希望跟踪事件的原因,并根据必要性来选择事件是很重要的。

  最小化捕捉的事件数量避免SQL Server浪费宝贵的资源带宽去生成所有的事件。捕捉像锁和执行计划这样的事件时应该小心进行,因为这些事件会使跟踪输出变得非常大并降低SQL Server的性能。

  过滤分两个阶段:预过滤由SQL Server执行,后过滤由用户执行。预过滤是捕捉SQL Server活动的联机阶段,预过滤提供多种溢出:

  • 降低了SQL Server的性能影响,因为生成有限数量的时间;
  • 降低跟踪输出大小;
  • 简化后过滤操作,首先因为要捕捉的事件更少了;

  预过滤的唯一缺点是,可能丢失一些彻底分析中需要的重要信息。

  2、丢弃性能分析所用的启动事件

  所用于性能分析的信息围绕一个查询的资源开销。想SP:StmtStarting这样的启动事件不提供这种信息,因为只有在事件完成之后,才能计算I/O量、CPU负载和查询的持续时间。所以,在跟踪运行缓慢的查询以进行性能分析时,不需要捕捉启动事件。这种信息由对应的完成事件来提供。

  什么情况下适合捕捉启动事件呢?应该在预期某些SQL查询因为错误而不能结束执行,或者频繁发现Attention事件的时候捕捉启动事件。Attention事件一般表示用户中途撤销了查询或者查询超时,可能因为查询运行了太长时间。

  3、限制跟踪输出大小

  除了预过滤事件和数据列,其他过滤条件也会限制跟踪输出的大小。同样,限制大小可能丢失所关注的总体系统状态中感兴趣的事件。但是,如果关注于开销较大的查询,过滤器是有帮助的。

  通过过滤器,能够筛选执行事件》=2或逻辑读数量》=100的查询,因为消耗太低的查询基本上不需要优化。

  4、避免在线数据列排序

  在性能分析期间,一般在不同的数据列(如Duration、CPU、Reads)上排序以确定相应数字最大的查询。如果脱机排序,就能降低在与SQL Server交互时必须进行的Profiler活动。排序捕捉到的SQL跟踪输出的方法如下:

  • 捕捉跟踪,不做任何排序或分组;
  • 另存为跟踪输出到一个跟踪文件;
  • 打开跟踪文件并按照需要在特定的数据列上排序或分组跟踪文件输出;

  5、远程运行Profiler

  直接在生产服务器上运行测试工具一般不是一个好办法。Profiler有一个大型的用户界面,因此,在其他机器上运行它更好。与系统监视器相似,Profiler不应该通过终端服务会话来运行,因为这样工具的主要部分仍然在服务器上运行。在直接将跟踪输出收集到一个文件时,保存在Profiler运行的本地文件上。这仍然是比通过系统存储过程将Profiler作为服务器端跟踪来运行更加资源密集的操作。使用系统存储过程仍然是最好的选择。

  6、限制使用某些事件

  某些事件的开销比其他的事件大。由于生成的查询的特性,语句完成事件的开销可能非常大。需要谨慎地使用,特别是在已经遇到压力的系统上,必须谨慎使用的事件有:Showplan XML事件,Performance:Showplan XML、Performance:Showplan XML for Query Compile和Performance:Showplan XML sTATISTICS Prifile。虽然这些事件可能有用,但是不要在生产机器上使用它们。

五、没有Profiler的情况下查询性能度量

  建立一个跟踪能收集许多数据供以后使用,但是这种收集可能代价很大,必须等待结果。

  如果要立即捕捉系统的性能度量,特别是关于查询性能的度量,那么动态管理视图sys.dm_exec_query_stats正式所需要的。如果还需要查询运行及其单独开销的历史记录,那么跟踪仍然是更好的工具。但是,如果只需要知道这时候运行时间最长的查询或者最多的物理读操作,则可以从sys.dm_exec_query_stats得到这些信息。

  因为sys.dm_exec_query_stats只是一个视图,可以简单地对其进行查询并获得服务器上查询计划统计的信息。

描述
Plan_handle 引用执行计划的指针
Creation_time 计划创建的时间
Last_execution time 查询最后一次使用的计划时间
Execution_count 计划已经使用的次数
Total_worker_time 从创建起计划使用的CPU时间
Total_logical_reads 从创建器计划使用的读操作数量
Total_logical_writes 从创建器计划使用的写操作数量
Query_hash 可用于识别有相似逻辑的查询的一个二进制hash
Query_plan_hash 可用于识别有相似逻辑的计划的一个二jinzhihash

  为了过滤从sys.dm_exec_query_stats返回的信息,需要将其连接到其他动态管理函数上,如sys.dm_exec_sql_text可以显示与计划相关的查询文本,sys.dm_query_plan显示用于查询的执行计划。一旦连接到其他DMF,可以限制希望过滤得数据库或过程。

简介


SQL Server Profiler的中文意思是SQL Server事件探查,一个Sql的监视工具,可以具体到每一行Sql语句,每一次操作,和每一次的连接。感觉这个工具的作用还是很大的,给大家分享一下,对于新手了解Sql语句的写法和提高语句的性能方法有很大的帮助。

SQL Server Profiler使用方法


我们单击开始--程序--Microsoft SQL Server 2005--性能工具--SQL Server Profiler

如下图

然后会出现如下界面

我们单击文件---【新建跟踪(N)...】,这是一个多窗口多任何的工具,我们可以同时新建不同的跟踪窗口,也可以是不同的数据库

接着:

在这里我们输入 我们的跟踪的数据库的服务器名称,用户名和密码等信息。单击连接进入下一个界面

上图中左面的可以进行一个基本设置,使用的模板选择,和文件的保存选择等。我们一般使用默认的就OK了,不用动上面的东西,右面的图是事件选择,也就是说我们要跟踪的事件有那个,在这里可以一一的选择,基本上Sql上有的事件都有,包括你用SQL Server Management Studio操作数据库的过程都可以跟踪的到。具体的事件和说明大家可以自己看一下。

只要单击显示所有事件就可以进行全部事件的选择了。

我们还可以对统计的字段进行筛选,单击任意一个列标题可以查看列的说明如下图

需要过滤具体的列名值,则选择对应的列,在右边树形框录入具体的值,并必须选择排除不包含值的行哈。

我们从上图上依次说明 为:

TextDate            依赖于跟踪中捕获的事件类的文本值;

ApplicationName  创建 SQL Server 连接的客户端应用程序的名称。此列由该应用程序传递的值填充,而不是由所显示的程序名填充的;

NTusername        Windows 用户名。

LoginName           用户的登录名(SQL Server 安全登录或 Windows 登录凭据,格式为“域\用户名”)

CPU                    事件使用的 CPU 时间(毫秒)。

Reads                 由服务器代表事件读取逻辑磁盘的次数。

Writes                由服务器代表事件写入物理磁盘的次数。

Duration             事件占用的时间。尽管服务器以微秒计算持续时间,SQL Server Profiler 却能够以毫秒为单位显示该值,具体情况取决于“工具”>“选项”对话框中的设置

ClientProcessID   调用 SQL Server 的应用程序的进程 ID。

SPID                  SQL Server 为客户端的相关进程分配的服务器进程 ID。

StratTime           事件(如果可用)的启动时间。

EndTime             事件结束的时间。对指示事件开始的事件类(例如 SQL:BatchStarting 或 SP:Starting)将不填充此列。

BinaryData          依赖于跟踪中捕获的事件类的二进制值。

然后我们单击运行就可以,当然如果有兴趣的话你也可以对列进行重新排列和筛选,只要单击下面相应的按钮根据提示操作就要可以了,我们这里就安默认的进行

通过上面的图我们就可以清楚的跟踪到每一步操作是过程了,

现在如果大家对那版的Sql语句的写法不怎么懂的话就可以参考上面的,而且 是时时的,你在Sql里操作几下这里就会出现相应的Sql语句,也是一个学习和提高的好工具

不仅仅是这样,我们还可以对其中的数据进行分析,查询,跟踪可以暂停,开始和停止操作,可以同时启动多个跟踪,同时跟踪不同的数据库和表

如果和Sql的数据库引擎优化顾问配合使用的话就更好了,可以分析出来你的Sql语句性能如果,而且还会告诉你怎么修改会更好,我们一起来看一下吧

数据库引擎优化顾问使用方法


有了这个跟踪的记录我们怎么样使用数据库引擎优化顾问对其进行分析优化呢?当然第一步我们要先把跟踪到的记录导出到文件.trc类型的文件。单击文件--另存为

假如我们把文件保存为123.trc

现在我们来打开数据库引擎优化顾问  我们单击开始--程序--Microsoft SQL Server 2005--性能工具--数据库引擎优化顾问

如下图

和上面一样我们要先输入数据库的登录信息

单击连接进入如下界面

我们可以看一下界面,一般不用选择只要安默认的就OK了,需要配置的我上面都有注释。在这里大家一定要记得选择用于工作负荷的数据库和表,意思就是设置要分析的数据库否则会分析不成功。

现在就可以单击开始了

在这里我们可以看到分析成功后的分析报告,这还不算,我们单击上面的

建议选项卡

在这里还给出了你的那些表,需要优化,应该怎么建立索引和视图才能更有效的提高性能,更好玩的是连需要优化的Sql语句都给生成好了,

我们直接复制执行就要可以了。

SQL Server Profiler(转载)的更多相关文章

  1. 运行sql server profiler所需的权限

    ********运行Sql Server Profiler所需的权限(performance)*********/ --EG. -- 使用TRACE帐户(Performancetest)跟踪Sql S ...

  2. SQL Server Profiler小技巧——筛选请求

    如果需要转载,请附上本文作者和原文链接:http://www.cnblogs.com/zeusro/p/4016228.html Microsoft SQL Server Profiler 是 SQL ...

  3. SQL Server Profiler常用功能

    最近因调研Linq to object 和Linq to Entity的数据组合查询问题,需要用到Sql Server Profiler检测在数据上执行的语句,在调试sql语句时,给了很大的帮助. 这 ...

  4. SQL Server Profiler

    一.SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问 ...

  5. SQL Server Profiler使用教程,通俗易懂才是王道

    做开发,平时难免和数据库打交道,特别是写存储过程,对于我们这些不常写SQL的人来说是一件极其痛苦的事,每次写完运行总是有错,如果用的是本地数据库的话还好,可以在本机调试SQL,那如果在数据库在服务器上 ...

  6. SQL Server Profiler教程

    SQL Server Profiler是SQL Server企业版自带的一个sql 语句跟踪和分析工具,功能十分强大.熟练地使用它,对我们分析数据库性能问题很有帮助,比如当数据访问使用EF等ORM框架 ...

  7. SQL Server Profiler工具

    一.SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问 ...

  8. SQL2005 : 如何在SQL Server Profiler (事件查看器)中 跟踪查看死锁恢复

    SQL Profiler 通过 SQL Profiler 工具程序,可监控应用程序如何访问数据库引擎.普通来说,当系统性能需要优化或是应用程序对数据库访问的结果不合预期,都可以使用该工具确认视图问题所 ...

  9. SQL Server Profiler使用方法

    一.SQL Server Profiler使用方法 1.单击开始--程序--Microsoft SQL Server 2005--性能工具--SQL Server Profiler,如下图:   2. ...

随机推荐

  1. hadoop计算二度人脉关系推荐好友

    https://www.jianshu.com/p/8707cd015ba1 问题描述: 以下是qq好友关系,进行好友推荐,比如:老王和二狗是好友 , 二狗和春子以及花朵是好友,那么老王和花朵 或者老 ...

  2. BUAA_OO_电梯系列

    电梯作业 第一次作业和第二次作业 由于我第一次作业给傻瓜电梯写了捎带所以第一次第二次作业差不多 电梯运行一个线程Elevator,输入控制一个线程Call 一个物理电梯控制表可以完成移动和进出人功能, ...

  3. php 写入csv时 双引号,逗号及特殊字符

    1.双引号 <?php function new_csv($string) { $filename = date('Ymd').'.csv'; //设置文件名 header("Cont ...

  4. [HAOI2011]Problem b BZOJ2301 数学

    题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...

  5. 分布式id生成方法

    系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很多,适应不同的场景.需求以及性能要求.所以有些比较复杂的系统会有多个ID生成的策略.下面就介绍一些常见 ...

  6. javascript的代码块

    a block of code 注意到这个问题是在看书的时候,中文版中出现“代码片段”这样的词语,于是就去翻看了英文版的原书.书中的用了a block of code,难道不应该翻译成代码块吗?(作为 ...

  7. P4294 [WC2008]游览计划

    传送门 斯坦纳树 给一个联通图,求 $k$ 个关键点联通的最小生成树权值 设 $f[o][i]$ 表示当前关键点选择状态为 $o$ ,以点 $i$ 为根的树的最小权值 初始 $f[1<<( ...

  8. 118th LeetCode Weekly Contest Pancake Sorting

    Given an array A, we can perform a pancake flip: We choose some positive integer k <= A.length, t ...

  9. c++ 222

        [成功者的习惯]   1.背后说别人好话:听到某人说别人坏话时只微笑: 2.过去的事不全让人知道: 3. 尊敬不喜欢你的人:对事无情,对人有情: 4.多做自我批评:为别人喝彩: 5.感恩:学会 ...

  10. C++ GUI Qt4编程(12)-6.1FindFileDialog

    1. 主要介绍了QGridLayout, QHBoxLayout, QVBoxLayout3种布局管理器的使用方法. 2. 在linux中,继承自QDialog的对话框,没有最大化.最小化.关闭按钮, ...