透过地方Agent监控Azure,与连接本地库的一些操作不相同

 

 

背景

咱们知道Azure Sql Database
能够下降运维开销、是一种Pass格局,有资源弹性装置,可以轻易调整资源自动对应不相同工作高峰(当然也得以降低资费基金),也惠及项近期期的资源扩张,以及部分别样优点或特色,那就不一一列出。那么数据库开发工程师来说,操作Azure
Sql Database 与大家运用的SSMS(Microsoft Sql Server Management
Studio)在地头库上操作有哪些差别。

 

我们简要从如下几有的进行相比

1.创立对象相比较;(简单列一下Azure
上开创数据库操作,SSMS成立数据库暗许省略)

2.连接库比较;

3.操作比较;

 

背景

我们通晓Azure Sql Database
可以下落运维开支、是一种Pass形式,有资源弹性装置,能够自由调整资源自动对应不相同工作高峰(当然也得以下降费用基金),也有利于项目前期的资源扩大,以及一些任何优点或特色,那就不一一列出。那么数据库开发工程师来说,操作Azure
Sql Database 与大家采纳的SSMS(Microsoft Sql Server Management
Studio)在当地库上操作有何分歧。

 

俺们简要从如下几有些进行相比

1.创造对象相比;(简单列一下Azure
上开创数据库操作,SSMS创制数据库暗中认同省略)

2.连接库比较;

3.操作相比较;

 

背景:

尽管如此Azure sql
database有DMVs可以查阅DTU等应用状态,但记录有时光限制,不会一向保留。为了更好监控Azure_sql_database上挨家挨户库的DTU使用情形、数据库磁盘使用境况、阻塞等状态。通过本地的Agent的job使用link
server 链接到各种Azure sql database 对应库(本地Ip能直连azure sql
database),把有关的新闻读取出来,存储在当地已新建好的对应表中,通过分析本地对应表中记录来贯彻监控azure
sql database各样库的图景。如需驾驭azure sql database 与
ssms在开发上的片段有别于。

 

背景:

虽说Azure sql
database有DMVs可以查阅DTU等应用意况,但记录有时间限定,不会一贯保留。为了更好监控Azure_sql_database上相继库的DTU使用意况、数据库磁盘使用状态、阻塞等景况。通过地点的Agent的job使用link
server 链接到各样Azure sql database 对应库(本地Ip能直连azure sql
database),把有关的音信读取出来,存储在地方已新建好的附和表中,通过分析本地对应表中记录来落实监控azure
sql database各样库的景况。如需驾驭azure sql database 与
ssms在开发上的一部分区分。

 

1.创制对象相比

 997755.com澳门葡京 1

 

 

 997755.com澳门葡京 2

 997755.com澳门葡京 3

997755.com澳门葡京 4

 

 997755.com澳门葡京 5

 

 997755.com澳门葡京 6

997755.com澳门葡京 7

1.创设对象比较

 997755.com澳门葡京 8

 

 

 997755.com澳门葡京 9

透过地方Agent监控Azure,与连接本地库的一些操作不相同。 997755.com澳门葡京 10

997755.com澳门葡京 11

 

 997755.com澳门葡京 12

 

 997755.com澳门葡京 13

997755.com澳门葡京 14

基本思路:

首先步:本地库中新建好相应的表用来存放从azure sql
database 上读取的记录;

其次步:在当地实例中新建好各种对应azure sql
database 各样库的数据库链接,并把相关音讯寄存在azure_dblink_configure表中;

其三步:在地头库中新建好存储进程用来拍卖azure sql
database上的记录存储在本土对应的表中;

第四步:在该地数据库的代办中新建job通过安顿循环调用存储进程;

基本思路:

第一步:本地库中新建好相应的表用来存放在从azure sql
database 上读取的笔录;

其次步:在地面实例中新建好种种对应azure sql
database 种种库的数据库链接,并把有关音信寄存在azure_dblink_configure表中;

其三步:在当地库中新建好存储进度用来处理azure sql
database上的笔录存储在地方对应的表中;

第四步:在本地数据库的代理中新建job通过安插循环调用存储进程;

2.链接库的可比

997755.com澳门葡京 15

 

997755.com澳门葡京 16

997755.com澳门葡京 17

由此上述图可以看看,在azure sql
database 中涉及到实例超级的目的都以未曾了。

在azure sql
database几乎总括如下:

1.从未
AlwaysON,没有数据库镜像,没有日记传送,没有复制。
有各州复制可以直接助长数据库辅助副本(库大小是指数据文件大小);

2.一贯不 agent
;如需实践定时调度可以参见《通过当地Agent监控Azure_sql_database》

3.没有SSIS;

4.不援救实例一级的靶子(如不帮忙全局临时表、没有Profiler等);如需督查能够参照《怎么样在Azure
sql database 下监控正在周转的剧本或某个存储进度是不是已运转》

 

2.链接库的可比

997755.com澳门葡京 18

 

997755.com澳门葡京 19

997755.com澳门葡京 20

经过上述图可以看出,在azure sql
database 中涉嫌到实例超级的靶子都是不曾了。

在azure sql
database大概统计如下:

1.未曾
AlwaysON,没有数据库镜像,没有日记传送,没有复制。
有各地复制能够一贯抬高数据库辅助副本(库大小是指数据文件大小);

2.并未 agent
;如需执行定时调度可以参照《通过地面Agent监控Azure_sql_database》

3.没有SSIS;

4.不帮忙实例一流的目的(如不援救全局临时表、没有Profiler等);如需督查可以参考《如何在Azure
sql database 下监控正在运行的台本或某个存储进度是不是已运转》

 

地面测试环境:

Microsoft SQL Server 2012 – 11.0.2100.60 (X64)

    Feb 10 2012 19:39:15

    Copyright (c) Microsoft Corporation

    Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build
9200: )

 

本地测试环境:

Microsoft SQL Server 2012 – 11.0.2100.60 (X64)

    Feb 10 2012 19:39:15

    Copyright (c) Microsoft Corporation

    Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build
9200: )

 

3.具体操作方面可比

 997755.com澳门葡京 21

 通过上图发现azure sql
database系统数据库中并未tempdb,这是不是使用临时表之类的目的?

首先查看当前的azure sql database
版本号

997755.com澳门葡京 22

 测试临时表(不是sql server 2016
temporal table)

 997755.com澳门葡京 23

997755.com澳门葡京 24

可以行使临时表,不协助选拔全局的临时表。

997755.com澳门葡京 25

 Pass情势下,某些命令已不帮忙。

997755.com澳门葡京 26

 注意暗中认同的getdate()是UTC时间,与日本首都时间相差8钟头。

997755.com澳门葡京 27

 无法在本库显式调用其余库,如:use
master

 

专断认同景况下,azure sql database
不协助跨库操作,需求创制扩张表,建同构同名的表,只可以是只读且架构唯一。如要存储进度进展跨库操作,需选用sp_execute_remote调用。

 

ssms
2012界面下存储进度点右键如下图:

997755.com澳门葡京 28

SSMS
2016界面下存储进程点右键如下图:

997755.com澳门葡京 29

UI界面操作,指出安装新型版本SSMS.大概 exec
sp_helptext
加具体的蕴藏进程名称,执行,把履行结果拷出才是储存进程的本子;

 

参考资料

怎么创立扩大表

sp_execute_remote

3.具体操作方面可比

997755.com澳门葡京, 997755.com澳门葡京 30

 通过上图发现azure sql
database系统数据库中从不tempdb,那是或不是利用临时表之类的靶子?

率先查看当前的azure sql database
版本号

997755.com澳门葡京 31

 测试临时表(不是sql server 2016
temporal table)

 997755.com澳门葡京 32

997755.com澳门葡京 33

可以行使临时表,不辅助使用全局的临时表。

997755.com澳门葡京 34

 Pass方式下,某些命令已不支持。

997755.com澳门葡京 35

 注意暗许的getdate()是UTC时间,与上海时间相差8钟头。

997755.com澳门葡京 36

 不或者在本库显式调用其他库,如:use
master

 

暗中认可意况下,azure sql database
不扶助跨库操作,必要创设扩充表,建同构同名的表,只可以是只读且架构唯一。如要存储进程进展跨库操作,需使用sp_execute_remote调用。

 

ssms
2012界面下存储进度点右键如下图:

997755.com澳门葡京 37

SSMS
2016界面下存储进度点右键如下图:

997755.com澳门葡京 38

UI界面操作,提议设置新型版本SSMS.恐怕 exec
sp_helptext
加具体的存储进度名称,执行,把推行结果拷出才是储存进度的本子;

 

参考资料

怎么着成立扩大表

sp_execute_remote

切实落到实处步骤:

切切实实贯彻步骤:

总结

azure sql database
与ssms相比:

1.并未
AlwaysON,没有数据库镜像,没有日记传送,没有复制。
有外市复制可以一向抬高数据库接济副本(库大小是指数据文件大小);

2.从未 agent
;如需执行定时调度可以参照《通过地面Agent监控Azure sql database》

3.没有SSIS;

4.不支持实例拔尖的对象(例如不支持全局变量、没有Profiler等);如需督查能够参考《怎么样在Azure
sql database 下监控正在运行的脚本或某个存储进程是不是已运行》

5.有些命令不帮忙,因azure sql
database 是Pass形式;

6.注意暗中同意getdate()是取UTC时间,与新加坡时间相差8钟头;

7.无法在本库显式调用其他库;

8.默许意况下,azure sql database
不支持跨库操作,必要成立伸张表,建同构同名的表,只可以是只读且架构唯一;

9.azure sql database
是根据v12的引擎,要在UI界面上操作提议安装ssms 2016版操作。

10.用户名限制,不或然使用admin\administrator\sa\guest\root

总结

azure sql database
与ssms相比:

1.一直不
AlwaysON,没有数据库镜像,没有日记传送,没有复制。
有内地复制可以一向抬高数据库援助副本(库大小是指数据文件大小);

2.从未有过 agent
;如需实践定时调度可以参考《通过当地Agent监控Azure sql database》

3.没有SSIS;

4.不协理实例一级的靶子(例如不辅助全局变量、没有Profiler等);如需督查可以参见《如何在Azure
sql database 下监控正在周转的本子或某个存储进度是或不是已运转》

5.有些命令不辅助,因azure sql
database 是Pass方式;

6.小心暗中同意getdate()是取UTC时间,与东京时间相差8钟头;

7.不或许在本库显式调用其余库;

8.暗中认同景况下,azure sql database
不协助跨库操作,须求创建扩张表,建同构同名的表,只好是只读且架构唯一;

9.azure sql database
是根据v12的发动机,要在UI界面上操作提出设置ssms 2016版操作。

10.用户名限制,无法选取admin\administrator\sa\guest\root

率先步:新建库新建表

997755.com澳门葡京 39997755.com澳门葡京 40

  1 --新建保存监控记录的库
  2 IF DB_ID('azure_monitor') IS NOT NULL
  3     DROP DATABASE azure_monitor;
  4 GO
  5 CREATE DATABASE azure_monitor;
  6 GO 
  7 USE azure_monitor;
  8 GO 
  9 --在保存监控记录的库上新建如下表:
 10 IF OBJECT_ID('azure_dblink_configure','U') IS NOT NULL
 11 DROP TABLE azure_dblink_configure;
 12  
 13 CREATE TABLE azure_dblink_configure
 14     (
 15       id INT IDENTITY(1, 1) ,
 16       dblink NVARCHAR(200) NOT NULL , --dblink
 17       dbname NVARCHAR(50) NOT NULL ,
 18       descriptions NVARCHAR(200) ,  --描述
 19       okflag BIT DEFAULT ( 1 )
 20                  NOT NULL ,   ---1启用,0停用
 21       createuser NVARCHAR(20) ,  --创建人
 22       createdate DATETIME DEFAULT ( GETDATE() )
 23                           NOT NULL ,  --创建时间
 24       updatedate DATETIME DEFAULT ( GETDATE() )
 25                           NOT NULL   ---更新时间
 26     );
 27 ALTER TABLE azure_dblink_configure ADD CONSTRAINT PK_azure_dblink_configure PRIMARY KEY(dblink,dbname);
 28 
 29 --监控存储空间表
 30 IF OBJECT_ID('monitor_azure_spaceused','U') IS NOT NULL
 31 DROP TABLE monitor_azure_spaceused;
 32  
 33 CREATE TABLE monitor_azure_spaceused
 34     (
 35       id INT IDENTITY(1, 1)
 36              PRIMARY KEY ,
 37       dblink NVARCHAR(200),
 38       database_name VARCHAR(200) ,
 39       [sum_database(G)] decimal(18, 2),
 40       execute_time_beijing DATETIME,
 41       create_time DATETIME DEFAULT(GETDATE())
 42     );
 43 
 44 --监控DTU等情况表 
 45 IF OBJECT_ID('monitor_azure_DTU', 'U') IS NOT NULL
 46     DROP TABLE monitor_azure_DTU;
 47  
 48 CREATE TABLE monitor_azure_DTU
 49     (
 50       id INT IDENTITY(1, 1)
 51              PRIMARY KEY ,
 52       dblink NVARCHAR(200),
 53       database_name VARCHAR(200) ,
 54       beijin_end_time DATETIME NULL ,
 55       avg_cpu_percent DECIMAL NULL ,
 56       avg_data_io_percent DECIMAL NULL ,
 57       avg_log_write_percent DECIMAL NULL ,
 58       avg_memory_usage_percent DECIMAL NULL ,
 59       xtp_storage_percent DECIMAL NULL ,
 60       max_worker_percent DECIMAL NULL ,
 61       max_session_percent DECIMAL NULL ,
 62       dtu_limit INT NULL ,
 63       create_time DATETIME DEFAULT ( GETDATE() )
 64 );
 65  
 66 CREATE INDEX IX_monitor_azure_DTU ON monitor_azure_DTU ([database_name]) INCLUDE ([beijin_end_time]);
 67  
 68 --监控阻塞表 
 69 IF OBJECT_ID('monitor_azure_blocked', 'U') IS NOT NULL
 70     DROP TABLE monitor_azure_blocked;
 71  
 72 CREATE TABLE monitor_azure_blocked
 73     (
 74       id INT IDENTITY(1, 1)
 75              PRIMARY KEY ,
 76       dblink NVARCHAR(200),
 77       dbname VARCHAR(200) ,
 78       spid SMALLINT NOT NULL ,
 79       kpid SMALLINT NOT NULL ,
 80       blocked SMALLINT NOT NULL ,
 81       waittype [VARCHAR](MAX) NOT NULL ,
 82       waittime BIGINT NOT NULL ,
 83       lastwaittype NCHAR(32) NOT NULL ,
 84       waitresource NCHAR(256) NOT NULL ,
 85       dbid SMALLINT NOT NULL ,
 86       uid SMALLINT NULL ,
 87       cpu INT NOT NULL ,
 88       physical_io BIGINT NOT NULL ,
 89       memusage INT NOT NULL ,
 90       login_time DATETIME NOT NULL ,
 91       last_batch DATETIME NOT NULL ,
 92       ecid SMALLINT NOT NULL ,
 93       open_tran SMALLINT NOT NULL ,
 94       status NCHAR(30) NOT NULL ,
 95       sid [VARCHAR](MAX) NOT NULL ,
 96       hostname NCHAR(128) NOT NULL ,
 97       program_name NCHAR(128) NOT NULL ,
 98       hostprocess NCHAR(10) NOT NULL ,
 99       cmd NCHAR(16) NOT NULL ,
100       nt_domain NCHAR(128) NOT NULL ,
101       nt_username NCHAR(128) NOT NULL ,
102       net_address NCHAR(12) NOT NULL ,
103       net_library NCHAR(12) NOT NULL ,
104       loginame NCHAR(128) NOT NULL ,
105       context_info [VARCHAR](MAX) NOT NULL ,
106       sql_handle [VARCHAR](MAX) NOT NULL ,
107       stmt_start INT NOT NULL ,
108       stmt_end INT NOT NULL ,
109       request_id INT NOT NULL ,
110       [text]  NVARCHAR(max),
111       createtime DATETIME DEFAULT ( GETDATE() )
112     );

View Code

先是步:新建库新建表

997755.com澳门葡京 41997755.com澳门葡京 42

  1 --新建保存监控记录的库
  2 IF DB_ID('azure_monitor') IS NOT NULL
  3     DROP DATABASE azure_monitor;
  4 GO
  5 CREATE DATABASE azure_monitor;
  6 GO 
  7 USE azure_monitor;
  8 GO 
  9 --在保存监控记录的库上新建如下表:
 10 IF OBJECT_ID('azure_dblink_configure','U') IS NOT NULL
 11 DROP TABLE azure_dblink_configure;
 12  
 13 CREATE TABLE azure_dblink_configure
 14     (
 15       id INT IDENTITY(1, 1) ,
 16       dblink NVARCHAR(200) NOT NULL , --dblink
 17       dbname NVARCHAR(50) NOT NULL ,
 18       descriptions NVARCHAR(200) ,  --描述
 19       okflag BIT DEFAULT ( 1 )
 20                  NOT NULL ,   ---1启用,0停用
 21       createuser NVARCHAR(20) ,  --创建人
 22       createdate DATETIME DEFAULT ( GETDATE() )
 23                           NOT NULL ,  --创建时间
 24       updatedate DATETIME DEFAULT ( GETDATE() )
 25                           NOT NULL   ---更新时间
 26     );
 27 ALTER TABLE azure_dblink_configure ADD CONSTRAINT PK_azure_dblink_configure PRIMARY KEY(dblink,dbname);
 28 
 29 --监控存储空间表
 30 IF OBJECT_ID('monitor_azure_spaceused','U') IS NOT NULL
 31 DROP TABLE monitor_azure_spaceused;
 32  
 33 CREATE TABLE monitor_azure_spaceused
 34     (
 35       id INT IDENTITY(1, 1)
 36              PRIMARY KEY ,
 37       dblink NVARCHAR(200),
 38       database_name VARCHAR(200) ,
 39       [sum_database(G)] decimal(18, 2),
 40       execute_time_beijing DATETIME,
 41       create_time DATETIME DEFAULT(GETDATE())
 42     );
 43 
 44 --监控DTU等情况表 
 45 IF OBJECT_ID('monitor_azure_DTU', 'U') IS NOT NULL
 46     DROP TABLE monitor_azure_DTU;
 47  
 48 CREATE TABLE monitor_azure_DTU
 49     (
 50       id INT IDENTITY(1, 1)
 51              PRIMARY KEY ,
 52       dblink NVARCHAR(200),
 53       database_name VARCHAR(200) ,
 54       beijin_end_time DATETIME NULL ,
 55       avg_cpu_percent DECIMAL NULL ,
 56       avg_data_io_percent DECIMAL NULL ,
 57       avg_log_write_percent DECIMAL NULL ,
 58       avg_memory_usage_percent DECIMAL NULL ,
 59       xtp_storage_percent DECIMAL NULL ,
 60       max_worker_percent DECIMAL NULL ,
 61       max_session_percent DECIMAL NULL ,
 62       dtu_limit INT NULL ,
 63       create_time DATETIME DEFAULT ( GETDATE() )
 64 );
 65  
 66 CREATE INDEX IX_monitor_azure_DTU ON monitor_azure_DTU ([database_name]) INCLUDE ([beijin_end_time]);
 67  
 68 --监控阻塞表 
 69 IF OBJECT_ID('monitor_azure_blocked', 'U') IS NOT NULL
 70     DROP TABLE monitor_azure_blocked;
 71  
 72 CREATE TABLE monitor_azure_blocked
 73     (
 74       id INT IDENTITY(1, 1)
 75              PRIMARY KEY ,
 76       dblink NVARCHAR(200),
 77       dbname VARCHAR(200) ,
 78       spid SMALLINT NOT NULL ,
 79       kpid SMALLINT NOT NULL ,
 80       blocked SMALLINT NOT NULL ,
 81       waittype [VARCHAR](MAX) NOT NULL ,
 82       waittime BIGINT NOT NULL ,
 83       lastwaittype NCHAR(32) NOT NULL ,
 84       waitresource NCHAR(256) NOT NULL ,
 85       dbid SMALLINT NOT NULL ,
 86       uid SMALLINT NULL ,
 87       cpu INT NOT NULL ,
 88       physical_io BIGINT NOT NULL ,
 89       memusage INT NOT NULL ,
 90       login_time DATETIME NOT NULL ,
 91       last_batch DATETIME NOT NULL ,
 92       ecid SMALLINT NOT NULL ,
 93       open_tran SMALLINT NOT NULL ,
 94       status NCHAR(30) NOT NULL ,
 95       sid [VARCHAR](MAX) NOT NULL ,
 96       hostname NCHAR(128) NOT NULL ,
 97       program_name NCHAR(128) NOT NULL ,
 98       hostprocess NCHAR(10) NOT NULL ,
 99       cmd NCHAR(16) NOT NULL ,
100       nt_domain NCHAR(128) NOT NULL ,
101       nt_username NCHAR(128) NOT NULL ,
102       net_address NCHAR(12) NOT NULL ,
103       net_library NCHAR(12) NOT NULL ,
104       loginame NCHAR(128) NOT NULL ,
105       context_info [VARCHAR](MAX) NOT NULL ,
106       sql_handle [VARCHAR](MAX) NOT NULL ,
107       stmt_start INT NOT NULL ,
108       stmt_end INT NOT NULL ,
109       request_id INT NOT NULL ,
110       [text]  NVARCHAR(max),
111       createtime DATETIME DEFAULT ( GETDATE() )
112     );

View Code

其次步:新建link server,针对Azure sql database各样库新建链接

997755.com澳门葡京 43997755.com澳门葡京 44

 1 --具体的例子
 2 EXEC sp_addlinkedserver 
 3 @server='azure_sql_db_01', -- dblink名称
 4 @srvproduct='',      
 5 @provider='sqlncli', -- using SQL Server Native Client 
 6 @datasrc='XXXXXX.database.chinacloudapi.cn', -- 链接的数据库链接 
 7 @location='', 
 8 @provstr='', 
 9 @catalog='your_DB_name'        
10  
11 EXEC sp_addlinkedsrvlogin 'azure_sql_db_01', 'false', NULL, '用户名', '用户密码';
12 --注意用户是否有权限正常执行下述新建的存储过程
13  
14 EXEC sp_serveroption 'azure_sql_db_01', 'rpc out', true;
15 
16 
17 --插入azure_dblink_configure
18 IF NOT EXISTS ( SELECT  *
19                 FROM    azure_dblink_configure
20                 WHERE   dblink = N'azure_sql_db_01'
21                         AND dbname = N'your_DB_name' )
22     BEGIN 
23         INSERT  INTO azure_dblink_configure
24                 ( dblink ,
25                   dbname ,
26                   descriptions ,
27                   createuser
28                 )
29         VALUES  ( N'azure_sql_db_01' ,
30                   N'your_DB_name' ,
31                   N'某某项目' ,
32                   N'新建人员'
33                 );
34     END; 

View Code

第二步:新建link server,针对Azure sql database各样库新建链接

997755.com澳门葡京 45997755.com澳门葡京 46

 1 --具体的例子
 2 EXEC sp_addlinkedserver 
 3 @server='azure_sql_db_01', -- dblink名称
 4 @srvproduct='',      
 5 @provider='sqlncli', -- using SQL Server Native Client 
 6 @datasrc='XXXXXX.database.chinacloudapi.cn', -- 链接的数据库链接 
 7 @location='', 
 8 @provstr='', 
 9 @catalog='your_DB_name'        
10  
11 EXEC sp_addlinkedsrvlogin 'azure_sql_db_01', 'false', NULL, '用户名', '用户密码';
12 --注意用户是否有权限正常执行下述新建的存储过程
13  
14 EXEC sp_serveroption 'azure_sql_db_01', 'rpc out', true;
15 
16 
17 --插入azure_dblink_configure
18 IF NOT EXISTS ( SELECT  *
19                 FROM    azure_dblink_configure
20                 WHERE   dblink = N'azure_sql_db_01'
21                         AND dbname = N'your_DB_name' )
22     BEGIN 
23         INSERT  INTO azure_dblink_configure
24                 ( dblink ,
25                   dbname ,
26                   descriptions ,
27                   createuser
28                 )
29         VALUES  ( N'azure_sql_db_01' ,
30                   N'your_DB_name' ,
31                   N'某某项目' ,
32                   N'新建人员'
33                 );
34     END; 

View Code

其三步:在本地新建存储进度

997755.com澳门葡京 47997755.com澳门葡京 48

  1 ----监控库azure sql database 的存储过程例子
  2 /*=============================================
  3 -- Author:    jil.wen
  4 -- Create date: 2016/9/6
  5 -- Description:   监控azure sql database 上对应库库容量、DTU、阻塞情况;
  6 -- demo :   exec dbo.Azure_p_monitor 
  7  ============================================= */
  8 CREATE  PROCEDURE dbo.Azure_p_monitor
  9 AS
 10     BEGIN 
 11         SET NOCOUNT ON;
 12         DECLARE @linkserver NVARCHAR(MAX);--临时存储linkserver信息
 13         DECLARE @dblink NVARCHAR(200);    --dblink名称
 14         DECLARE @dbname NVARCHAR(50);     --dbname 名称
 15         DECLARE @id INT;                  --id
 16         DECLARE cur_wen CURSOR FORWARD_ONLY
 17         FOR
 18             SELECT  id ,
 19                     dblink ,
 20                     dbname
 21             FROM    azure_dblink_configure
 22             WHERE   okflag = 1
 23             ORDER BY id ASC;
 24         OPEN cur_wen;
 25         FETCH NEXT FROM cur_wen INTO @id, @dblink, @dbname;
 26         WHILE ( @@FETCH_STATUS = 0 )
 27             BEGIN 
 28             
 29                 SELECT  @linkserver = '[' + @dblink + ']' + '.' + '['
 30                         + @dbname + ']'; 
 31                --具体处理业务逻辑
 32                 BEGIN TRY 
 33                     ----监控DTU存储过程例子
 34                     BEGIN 
 35                         DECLARE @addtime DATETIME;
 36                      --取本地对应库的插入记录时间,注意本地的时间与azure sql database上的时间相差8小时
 37                         IF EXISTS ( SELECT  1
 38                                     FROM    monitor_azure_DTU
 39                                     WHERE   database_name = @dbname )
 40                             BEGIN 
 41                                 SELECT  @addtime = MAX([beijin_end_time])
 42                                 FROM    monitor_azure_DTU
 43                                 WHERE   database_name = @dbname;
 44                             END; 
 45                         ELSE   --如果为没有,默认是当前时间减一天
 46                             SELECT  @addtime = DATEADD(dd, -1, GETDATE());
 47                        -- PRINT @addtime;
 48                         DECLARE @addtime_nvar NVARCHAR(200);
 49                         SELECT  @addtime_nvar = CAST(@addtime AS NVARCHAR(200)); --转换类型
 50                        -- DECLARE @tmpsql NVARCHAR(MAX);  --调试变量
 51                         EXEC ( '  INSERT  INTO monitor_azure_DTU
 52                         ( dblink,
 53                         database_name ,
 54                         beijin_end_time ,
 55                         avg_cpu_percent ,
 56                         avg_data_io_percent ,
 57                         avg_log_write_percent ,
 58                         avg_memory_usage_percent ,
 59                         xtp_storage_percent ,
 60                         max_worker_percent ,
 61                         max_session_percent ,
 62                         dtu_limit
 63                         )
 64                         SELECT '+''''+@dblink+''''+ ' as dblink,'+'''' + @dbname + ''''+' AS database_name ,
 65                         DATEADD(hh, 8, a.end_time) as beijin_end_time ,
 66                         a.avg_cpu_percent ,
 67                         a.avg_data_io_percent ,
 68                         a.avg_log_write_percent ,
 69                         a.avg_memory_usage_percent ,
 70                         a.xtp_storage_percent ,
 71                         a.max_worker_percent ,
 72                         a.max_session_percent ,
 73                         a.dtu_limit
 74                         FROM  ' + @linkserver + '.sys.dm_db_resource_stats as a
 75                         WHERE   end_time > DATEADD(hh, -8,'+'''' +@addtime_nvar +'''' + ')');
 76                     END; 
 77                     ----监控阻塞存储过程例子
 78                     BEGIN 
 79  
 80                         DECLARE @spid NVARCHAR(50);
 81                         SELECT  @spid = CAST(@@spid AS NVARCHAR(50));
 82                        
 83                        
 84                         EXEC ('
 85                         INSERT INTO monitor_azure_blocked( dblink,dbname, spid, kpid, blocked, waittype, waittime, lastwaittype, waitresource, [dbid], [uid], cpu, physical_io, memusage, login_time, last_batch, ecid, open_tran, [status], [sid], hostname, [program_name], hostprocess, cmd, nt_domain, nt_username, net_address, net_library, loginame, [context_info], [sql_handle], stmt_start, stmt_end, request_id,text)
 86                         SELECT '+''''+@dblink+''''+' as dblink,*
 87                         FROM  openquery('+@dblink+','' SELECT  b.name AS dbname ,
 88                         a.spid ,
 89                         a.kpid ,
 90                         a.blocked ,
 91                         a.waittype ,
 92                         a.waittime ,
 93                         a.lastwaittype ,
 94                         a.waitresource ,
 95                         a.[dbid] ,
 96                         a.[uid] ,
 97                         a.cpu ,
 98                         a.physical_io ,
 99                         a.memusage ,
100                         DATEADD(hh, 8, a.login_time) AS login_time ,--已换算成北京时间
101                         DATEADD(hh, 8, a.last_batch) AS last_batch ,--已换算成北京时间
102                         a.ecid ,
103                         a.open_tran ,
104                         a.[status] ,
105                         a.[sid] ,
106                         a.hostname ,
107                         a.[program_name] ,
108                         a.hostprocess ,
109                         a.cmd ,
110                         a.nt_domain ,
111                         a.nt_username ,
112                         a.net_address ,
113                         a.net_library ,
114                         DATEADD(hh, 8, a.login_time) AS loginame ,--换算成北京时间
115                         a.[context_info] ,
116                         a.[sql_handle] ,
117                         a.stmt_start ,
118                         a.stmt_end ,
119                         a.request_id,
120                         c.text from sys.sysprocesses a inner join sys.databases b ON a.[dbid]=b.database_id  cross apply sys.dm_exec_sql_text(a.sql_handle) c
121                         WHERE   a.spid > 50
122                         AND a.blocked > 0
123                         AND a.spid <>'+@SPID+''')' );
124                       
125                     END;
126                     ----监控库容量的存储过程例子
127                     BEGIN 
128  
129                         EXEC 
130                         ( 'INSERT  INTO [dbo].[monitor_azure_spaceused]
131                         ( dblink,
132                         database_name ,
133                         [sum_database(G)] ,
134                         execute_time_beijing
135                         )
136                         SELECT '+''''+@dblink+ ''''+' as dblink,'+''''+ @dbname+ ''''+' AS database_name , --监控的具体库名
137                         ROUND(( SUM(reserved_page_count) * 8.0 / 1024 ) / 1024, 2) AS [sum_database(G)] ,
138                         DATEADD(hh, 8, GETDATE()) AS execute_time_beijing
139                         FROM  '+  @linkserver+'.sys.dm_db_partition_stats' );
140                     END; 
141              
142                 END TRY 
143             
144             
145                 BEGIN CATCH
146                     SELECT  ERROR_MESSAGE();
147                     --如链接不成功需要作废该链接,启用下述备注的代码
148                     --UPDATE  azure_dblink_configure
149                     --SET     okflag = 0 ,
150                     --        updatedate = GETDATE()
151                     --WHERE   id = @id;
152                 END CATCH;
153             
154               --  PRINT @tmpsql;
155                 FETCH NEXT FROM cur_wen INTO @id, @dblink, @dbname;
156             END;
157        
158         DEALLOCATE cur_wen;
159         SET NOCOUNT OFF;
160     END; 

View Code  

其三步:在当地新建存储进度

997755.com澳门葡京 49997755.com澳门葡京 50

  1 ----监控库azure sql database 的存储过程例子
  2 /*=============================================
  3 -- Author:    jil.wen
  4 -- Create date: 2016/9/6
  5 -- Description:   监控azure sql database 上对应库库容量、DTU、阻塞情况;
  6 -- demo :   exec dbo.Azure_p_monitor 
  7  ============================================= */
  8 CREATE  PROCEDURE dbo.Azure_p_monitor
  9 AS
 10     BEGIN 
 11         SET NOCOUNT ON;
 12         DECLARE @linkserver NVARCHAR(MAX);--临时存储linkserver信息
 13         DECLARE @dblink NVARCHAR(200);    --dblink名称
 14         DECLARE @dbname NVARCHAR(50);     --dbname 名称
 15         DECLARE @id INT;                  --id
 16         DECLARE cur_wen CURSOR FORWARD_ONLY
 17         FOR
 18             SELECT  id ,
 19                     dblink ,
 20                     dbname
 21             FROM    azure_dblink_configure
 22             WHERE   okflag = 1
 23             ORDER BY id ASC;
 24         OPEN cur_wen;
 25         FETCH NEXT FROM cur_wen INTO @id, @dblink, @dbname;
 26         WHILE ( @@FETCH_STATUS = 0 )
 27             BEGIN 
 28             
 29                 SELECT  @linkserver = '[' + @dblink + ']' + '.' + '['
 30                         + @dbname + ']'; 
 31                --具体处理业务逻辑
 32                 BEGIN TRY 
 33                     ----监控DTU存储过程例子
 34                     BEGIN 
 35                         DECLARE @addtime DATETIME;
 36                      --取本地对应库的插入记录时间,注意本地的时间与azure sql database上的时间相差8小时
 37                         IF EXISTS ( SELECT  1
 38                                     FROM    monitor_azure_DTU
 39                                     WHERE   database_name = @dbname )
 40                             BEGIN 
 41                                 SELECT  @addtime = MAX([beijin_end_time])
 42                                 FROM    monitor_azure_DTU
 43                                 WHERE   database_name = @dbname;
 44                             END; 
 45                         ELSE   --如果为没有,默认是当前时间减一天
 46                             SELECT  @addtime = DATEADD(dd, -1, GETDATE());
 47                        -- PRINT @addtime;
 48                         DECLARE @addtime_nvar NVARCHAR(200);
 49                         SELECT  @addtime_nvar = CAST(@addtime AS NVARCHAR(200)); --转换类型
 50                        -- DECLARE @tmpsql NVARCHAR(MAX);  --调试变量
 51                         EXEC ( '  INSERT  INTO monitor_azure_DTU
 52                         ( dblink,
 53                         database_name ,
 54                         beijin_end_time ,
 55                         avg_cpu_percent ,
 56                         avg_data_io_percent ,
 57                         avg_log_write_percent ,
 58                         avg_memory_usage_percent ,
 59                         xtp_storage_percent ,
 60                         max_worker_percent ,
 61                         max_session_percent ,
 62                         dtu_limit
 63                         )
 64                         SELECT '+''''+@dblink+''''+ ' as dblink,'+'''' + @dbname + ''''+' AS database_name ,
 65                         DATEADD(hh, 8, a.end_time) as beijin_end_time ,
 66                         a.avg_cpu_percent ,
 67                         a.avg_data_io_percent ,
 68                         a.avg_log_write_percent ,
 69                         a.avg_memory_usage_percent ,
 70                         a.xtp_storage_percent ,
 71                         a.max_worker_percent ,
 72                         a.max_session_percent ,
 73                         a.dtu_limit
 74                         FROM  ' + @linkserver + '.sys.dm_db_resource_stats as a
 75                         WHERE   end_time > DATEADD(hh, -8,'+'''' +@addtime_nvar +'''' + ')');
 76                     END; 
 77                     ----监控阻塞存储过程例子
 78                     BEGIN 
 79  
 80                         DECLARE @spid NVARCHAR(50);
 81                         SELECT  @spid = CAST(@@spid AS NVARCHAR(50));
 82                        
 83                        
 84                         EXEC ('
 85                         INSERT INTO monitor_azure_blocked( dblink,dbname, spid, kpid, blocked, waittype, waittime, lastwaittype, waitresource, [dbid], [uid], cpu, physical_io, memusage, login_time, last_batch, ecid, open_tran, [status], [sid], hostname, [program_name], hostprocess, cmd, nt_domain, nt_username, net_address, net_library, loginame, [context_info], [sql_handle], stmt_start, stmt_end, request_id,text)
 86                         SELECT '+''''+@dblink+''''+' as dblink,*
 87                         FROM  openquery('+@dblink+','' SELECT  b.name AS dbname ,
 88                         a.spid ,
 89                         a.kpid ,
 90                         a.blocked ,
 91                         a.waittype ,
 92                         a.waittime ,
 93                         a.lastwaittype ,
 94                         a.waitresource ,
 95                         a.[dbid] ,
 96                         a.[uid] ,
 97                         a.cpu ,
 98                         a.physical_io ,
 99                         a.memusage ,
100                         DATEADD(hh, 8, a.login_time) AS login_time ,--已换算成北京时间
101                         DATEADD(hh, 8, a.last_batch) AS last_batch ,--已换算成北京时间
102                         a.ecid ,
103                         a.open_tran ,
104                         a.[status] ,
105                         a.[sid] ,
106                         a.hostname ,
107                         a.[program_name] ,
108                         a.hostprocess ,
109                         a.cmd ,
110                         a.nt_domain ,
111                         a.nt_username ,
112                         a.net_address ,
113                         a.net_library ,
114                         DATEADD(hh, 8, a.login_time) AS loginame ,--换算成北京时间
115                         a.[context_info] ,
116                         a.[sql_handle] ,
117                         a.stmt_start ,
118                         a.stmt_end ,
119                         a.request_id,
120                         c.text from sys.sysprocesses a inner join sys.databases b ON a.[dbid]=b.database_id  cross apply sys.dm_exec_sql_text(a.sql_handle) c
121                         WHERE   a.spid > 50
122                         AND a.blocked > 0
123                         AND a.spid <>'+@SPID+''')' );
124                       
125                     END;
126                     ----监控库容量的存储过程例子
127                     BEGIN 
128  
129                         EXEC 
130                         ( 'INSERT  INTO [dbo].[monitor_azure_spaceused]
131                         ( dblink,
132                         database_name ,
133                         [sum_database(G)] ,
134                         execute_time_beijing
135                         )
136                         SELECT '+''''+@dblink+ ''''+' as dblink,'+''''+ @dbname+ ''''+' AS database_name , --监控的具体库名
137                         ROUND(( SUM(reserved_page_count) * 8.0 / 1024 ) / 1024, 2) AS [sum_database(G)] ,
138                         DATEADD(hh, 8, GETDATE()) AS execute_time_beijing
139                         FROM  '+  @linkserver+'.sys.dm_db_partition_stats' );
140                     END; 
141              
142                 END TRY 
143             
144             
145                 BEGIN CATCH
146                     SELECT  ERROR_MESSAGE();
147                     --如链接不成功需要作废该链接,启用下述备注的代码
148                     --UPDATE  azure_dblink_configure
149                     --SET     okflag = 0 ,
150                     --        updatedate = GETDATE()
151                     --WHERE   id = @id;
152                 END CATCH;
153             
154               --  PRINT @tmpsql;
155                 FETCH NEXT FROM cur_wen INTO @id, @dblink, @dbname;
156             END;
157        
158         DEALLOCATE cur_wen;
159         SET NOCOUNT OFF;
160     END; 

View Code  

第四步:本地Agent 使用job调用存储进程

Agent中job设置详情省略,可以参照数据库出现堵塞及时邮件预警提醒(下)。注意陈设时间距离合理设置。

 

第四步:本地Agent 使用job调用存储进度

Agent中job设置详情省略,可以参照数据库出现堵塞及时邮件预警指示(下)。注意陈设时间间隔合理设置。

 

参考资料:

sys.dm_db_resource_stats
sys.resource_stats

参考资料:

sys.dm_db_resource_stats
sys.resource_stats

补充:

1)可以考虑用SSIS来促成监督;

2)也可以设想不新建DBLink,直接在agent中选择sqlcmd来调用azure
sql database。

3)为了便于直观查看监控的数额,可以考虑用Power
BI等把监控的多少友好浮现出来。

 

补充:

1)可以设想用SSIS来完毕监督;

2)也足以考虑不新建DBLink,直接在agent中利用sqlcmd来调用azure
sql database。

3)为了便利直观查看监控的数量,可以考虑用Power
BI等把督查的数目友好显示出来。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website