LINKEDSERVER 与 ALIAS

简介:

通过在SQL03上“查找CPU消耗前十的查询”(脚本如下所示)时发现,第一名是一个奇怪的语句。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT  TOP  ( 10 ) 
         SUBSTRING (ST.text,( QS.statement_start_offset /2 ) + 1, 
                   ((  CASE  statement_end_offset 
                         WHEN  -1 THENDATALENGTH(st.text) 
                         ELSE  QS.statement_end_offset 
                       END - QS.statement_start_offset) / 2 ) + 1) 
                  ASstatement_text , 
         execution_count , 
         total_worker_time / 1000 AStotal_worker_time_ms , 
         (total_worker_time / 1000 ) / execution_count 
                  ASavg_worker_time_ms , 
         total_logical_reads , 
         total_logical_reads / execution_count ASavg_logical_reads , 
         total_elapsed_time / 1000 AStotal_elapsed_time_ms , 
         (total_elapsed_time / 1000 ) / execution_count 
                  ASavg_elapsed_time_ms , 
         qp.query_plan
FROM     sys.dm_exec_query_stats qs 
         CROSS  APPLY sys.dm_exec_sql_text(qs.sql_handle) st 
         CROSS  APPLY sys.dm_exec_query_plan(qs.plan_handle) qp 
ORDER  BY  total_worker_time  DESC



wKiom1fAEPihggGMAABTsBRE7hk018.png


语句展开为:

1
2
3
4
5
6
7
SELECT  "Tbl1012" . "FMSKU" "Col1060" , "Tbl1012" . "FMID"  "Col1063" , "Tbl1012" . "ToID" "Col1067" 
FROM  "ARCHIVE" . "dbo" . "Log"  "Tbl1012"  WITH  (NOLOCK) 
WHERE  "Tbl1012" . "ToLotnum" =@P1 
AND  "Tbl1012" . "TransactionType" = 'MV' 
AND  "Tbl1012" . "ReasonCode" = 'PG' 
AND  "Tbl1012" . "FMLocation" like  'STAGE%'  COLLATE  Chinese_PRC_CI_AS 
AND  "Tbl1012" . "ToLocation" like  'STAGE%'  COLLATE  Chinese_PRC_CI_AS


 

发现该语句里的表别名和列别名很奇怪。

 

于是,开启了SQL03上的Profiler跟踪。在“General”标签页,选择Standard模板。在“Events Selection”标签页,选择需要跟踪的事件类,勾选“Show all columns”,这里最关键的几列务必要选择:HostNameSessionLoginNameDatabaseName。然后点击“Column Filters…”,TextDataLike过滤条件中输入%Tbl1012%。开启跟踪。


wKioL1fAEUawkXO6AABbYMjeRV4459.png

wKiom1fAEUag9YbhAAAoKwt0css377.png

wKioL1fAEUfygzoUAADQ6y8Cdwo314.png

根据捕获的输出结果,来源主机为SQL01,会话登录名为ARCHIVE,数据库名为master

 

于是,在SQL01上开启Profiler跟踪。在“General”标签页,选择TSQL_SPs模板。在“Events Selection”标签页,务必选择“SP:StmtStarting”事件类,勾选“Show all columns”,务必选择:LineNumberSessionLoginNameSourceDatabaseID。点击“Column Filters…”,TextDataLike过滤条件输入%STAGE3%。开启跟踪。

 

LineNumber

包含存在错误的行的行号。对于涉及 Transact-SQL 语句的事件,像SP:StmtStartingLineNumber包含的是存储过程或批处理中语句的行号。

参见:https://msdn.microsoft.com/zh-cn/library/ms190762(v=SQL.100).aspx


wKiom1fAEbWC-bTXAABIh0ciK1Q763.png

wKioL1fAEbWDd85FAAAoZqrzol8282.png

wKioL1fAEbexnK-HAAS4YdSe0fE687.png


从捕获的输出中,我们可以知道该语句出自SP2223行附近。于是,找到该SP2223行得到验证。


wKiom1fAEefRiM_IAAH_4GMKeCQ161.png


然后通过该LinkedServer的“Local Login”和“Remote User”的对应关系进一步验证了。


wKioL1fAEjShlqrhAAAQcFxF8gY462.png

wKiom1fAEjSxhFzRAAA3HRyYb_k800.png

wKiom1fAEjSSSAH4AABTSwu7evY211.png

wKioL1fAEjWTSH_TAAA60fiWYNE160.png


总结

 

含有LINKEDSERVER的查询的别名在远端被内部命名为TBLxxxx\COLxxxx









本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1843054 ,如需转载请自行联系原作者












相关文章
|
负载均衡 网络协议 应用服务中间件
ES中索引别名(alias)的到底有什么用
ES中索引别名(alias)的到底有什么用
ES中索引别名(alias)的到底有什么用
linux command alias 别名
linux command alias 别名
alias别名的使用
alias别名的使用
177 0
|
Linux 开发工具
linux配置别名alias
临时配置方法,关闭窗口即失效 终端命令 alias cd_log='cd /var/log/' 多个命令之间使用';'隔开 alias vim_log='cd /var/log/;vim xx.
|
开发工具
|
开发工具
|
开发工具