使用 Profiler 来快速查看您的数据库中当前运行的 SQL 语句,比较过程的运行时间并分析这些对象在您的数据库中是如何进行交互的。
使用 Profiler 来标识如下问题:
解决问题时请考虑以下步骤:
当 SQL 语句在数据库中运行时,在 Profiler 的 “操作” 选项卡中将显示其相应的分析信息。
因为 Profiler 实时显示分析信息,您可以对数据库进行变更并查看其立即产生的效果。
在解决数据库性能较差的问题时,通常情况下首要任务是确定主要原因是应用程序还是数据库服务器。要确定客户端应用程序所消耗的处理时间,可使用 Profiler 中的 “操作” 选项卡并按单个连接过滤结果。如果来自该连接的不同请求之间存在时间差异,则主要的延迟发生在客户端应用程序内。
参考 Profiler 顶部的 “服务器负载” 图形来查看有关数据库服务器的 CPU 使用率以及磁盘和网络使用率的数据。当预计数据库服务器会因为执行备份、检查点或其它内部服务器活动而降低性能时,该图也会对时间进行突出显示。
在此节中:
启动数据库分析来确定如下问题:死锁和连接阻塞、长时间运行并且开销庞大的查询和性能降低的时间段。
分析您的存储的 SQL 对象(如过程、函数、事件和触发器)来标识可影响系统性能的对象或语句。确定可能的解决方案后,对其进行测试,然后比较您的结果。
使用 [过滤器] 框来过滤 Profiler 中显示的信息,只留下您感兴趣操作的信息。
启动数据库分析来确定如下问题:死锁和连接阻塞、长时间运行并且开销庞大的查询和性能降低的时间段。
您必须具有 SYS_RUN_PROFILER_ROLE 系统角色才能使用 Profiler。
Profiler 是一种开发工具,用于实时记录数据库中的活动,并以简单易用的格式显示这些活动。
例如,在 “连接” 窗口中选择 “使用连接字符串进行连接” 操作并指定以下启动参数:
UID=DBA;PWD=sql;"DSN=SQL Anywhere 17 Demo"
在 Profiler 的 “操作” 选项卡中显示当前运行的 SQL 语句的相关信息。
分析您的存储的 SQL 对象(如过程、函数、事件和触发器)来标识可影响系统性能的对象或语句。确定可能的解决方案后,对其进行测试,然后比较您的结果。
您必须具有 SYS_RUN_PROFILER_ROLE 系统角色以使用 Profiler。
过程分析可提供过程、用户定义的函数、事件、系统触发器和触发器的执行时间测量值。将当前结果保存为基线,然后对过程进行增量更改。在每次更改后运行该过程,然后将新的结果与基线进行比较,以查明更改效果是否符合预期。
例如,在 “连接” 窗口中选择 “使用连接字符串进行连接” 操作并指定以下启动参数:
UID=DBA;PWD=sql;"DSN=SQL Anywhere 17 Demo"
在 Profiler 的 “操作” 选项卡中显示数据库中当前运行的 SQL 语句的相关信息。
顶部窗格中列出了自您开始分析后已执行的过程、触发器、函数和事件。该列表中显示了已经执行的存储的 SQL 对象。
特定于该对象的详细信息将出现在底部窗格中。
因为 Profiler 实时显示分析信息,您可以对数据库进行更改并查看立即产生的效果。
使用 [过滤器] 框来过滤 Profiler 中显示的信息,只留下您感兴趣操作的信息。
语法 filter_expression { [ " ] string [ " ] | [ attribute-value-pair ] } ...
attribute-and-value:
user=user-name[,...]
connection=connection-id[,...]
connectionName=connection-name[,...]
connectionName contains string[,...]
state={blocked | failed | running }
severity={debug | information | warning | error | critical | always}
severity{= | < | > | <>} severity-number
type=operation-type[,...]
date={today | yesterday | this week | last week | day-of-week | date-range}
executionTime{=|<|>}number { hours | minutes | seconds | h | m | s | ms }
blockedTime{=|<|>}number { hours | minutes | seconds | h | m | s | ms }
between date-format and date-format
AppInfo.appinfo-key=string
AppInfo.appinfo-key contains string
severity-number:
An integer between 0 and 255
date-range:
from date-format to date-format
date-format:
YYYY-MM-DD[ time-format ]
time-format:
HH [:MM[:SS] [ am | pm ] ]
day-of-the-week:
{ Monday|Tuesday|Wednesday|Friday|Saturday|Sunday }
operation-type:
{connect
|consoleMessage
|disconnect
|dropPreparedStatement
|executePreparedStatement
|executeStatement
|internal
|prepareStatement
|webServerMessage
|user-defined-trace-event-name }
appinfo-key:
{ API | EXE | HOST | IP| OS | OSUSER | PID | THREAD | TIMEZONEADJUSTMENT | VERSION }
参数
以下列表包含有关某些参数的其它信息。
任何指定的日期指的是语句开始执行的时间。
between 子句包括两个指定时间之间任意时间点运行的语句。指定日期必须具有相同的格式。
AppInfo 子句根据客户端应用程序的属性(如客户端计算机的 IP 地址、运行此客户端进程的操作系统等)对语句进行过滤。你可以为 appinfo-key 指定与 AppInfo 连接属性的 key 值相同的值。例如,指定 AppInfo.execontainsdbisql 以查看 Interactive SQL 中执行的语句。
本子句指的是警告或错误消息的严重程度。例如,以下内容为 CREATE TEMPORARY TRACE EVENT 语句的事件严重程度:0=经常、1-50=严重、51-100=错误、101-150=警告、151-200=信息、201-254=调试。
注释
缺省情况下,Profiler 会显示所有从其分析的数据库中收集的分析信息。当排除一个特定的问题时,将信息量减少至只显示与你的问题相关的信息,将十分有用。例如,过滤出与特定用户或连接不相关的所有事件。
单击右上角的 [过滤器] 框,然后单击下拉菜单中的 [添加过滤器表达式] 来通过选择不同的过滤器条件创建过滤器表达式。也可使用过滤器语法来创建复杂的过滤器表达式。
将文本用引号引起来使其被视为文字文本。如果引用文本中包含引号,则使用反斜线对其进行转义。如果引用文本中包含反斜线,则除非反斜线后有引号,否则不需要对其进行转义。
过滤器语法中的所有子句并非都适用于所有事件操作类型。例如,consoleMessage 操作类型不具有相关阻塞时间。如果指定的值不适用于操作类型,则该值将被忽略。
过滤器表达式 | 匹配项 |
update | 任何包含 Update 词的操作 |
set salary | 任何包含 set salary 词组的操作 |
user=dba | 与任何数据库中名为 dba 的用户相关的所有操作。 |
type=executeStatementupdate | 所有包含 Update 词的操作。 |
type=executeStatementexecutionTime >10 s | 所有执行时间超过 10 秒钟的 SQL 语句。 |
severity=errorerror | 所有具有错误严重程度的操作。 |
type=connect,disconnectdatefrom 9:00 to 9:30 | 发生在当天 9:00 至 9:30 之间的连接和断开连接操作。 |
connection=17 | 所有与连接 ID 17 相关的操作。 |
| 所有应用程序名为 dbisql 的操作 |
executionTime>5 s
使用以下过滤器来查看所有运行时间大于 5 秒钟的 SQL 语句:
executionTime>5 s type=ExecuteStatement
使用以下过滤器来查看所有运行时间大于 5 秒钟的 SQL 语句(包括预准备(参数化的)语句):
executionTime>5 s type=ExecuteStatement,ExecutePreparedStatement
blockedTime>10 ms
使用以下过滤器来查看当前处于阻塞状态的语句:
state=blocked
severity=error
user=dba
connection=91
appinfo.exe contains mlsrv
between 9:15 and 9:20
使用以下过滤器来查看那些仅在 2015 年 1 月 31 日 9:15 至 9:20 之间运行的操作:
between 2015-01-31 9:15 and 2015-01-31 9:20
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
32 | |
24 | |
8 | |
7 | |
7 | |
6 | |
6 | |
6 | |
5 | |
4 |