虽然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 上读取的记录;

第二步:在本地实例中新建好各个对应azure sql database 各个库的数据库链接,并把相关信息存放在azure_dblink_configure表中;

第三步:在本地库中新建好存储过程用来处理azure sql database上的记录存储在本地对应的表中;

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

本地测试环境:

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: )

 

具体实现步骤:

第一步:新建库新建表

  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

相关文章:

  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-07
  • 2022-01-11
  • 2021-10-22
  • 2021-08-29
猜你喜欢
  • 2021-04-01
  • 2021-12-08
  • 2022-12-23
  • 2021-08-07
  • 2022-12-23
  • 2021-10-24
  • 2021-08-20
相关资源
相似解决方案