{"id":9436,"date":"2018-10-29T08:15:25","date_gmt":"2018-10-29T11:15:25","guid":{"rendered":"http:\/\/www.fabriciolima.net\/?p=9436"},"modified":"2018-10-29T08:15:25","modified_gmt":"2018-10-29T11:15:25","slug":"azure-sql-database-monitorando-a-utilizacao-de-recursos","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2018\/10\/29\/azure-sql-database-monitorando-a-utilizacao-de-recursos\/","title":{"rendered":"Azure SQL Database &#8211; Monitorando a Utiliza\u00e7\u00e3o de Recursos"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9424 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/AzureSerie08.png\" alt=\"\" width=\"611\" height=\"366\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/AzureSerie08.png 688w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/AzureSerie08-300x180.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/AzureSerie08-410x246.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/AzureSerie08-100x60.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/AzureSerie08-275x165.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/AzureSerie08-20x12.png 20w\" sizes=\"auto, (max-width: 611px) 100vw, 611px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Fala Pessoal,<\/p>\n<p>Continuando a s\u00e9rie de posts sobre\u00a0<strong>Azure SQL Database<\/strong>, dessa vez vamos criar uma rotina para que voc\u00ea possa monitorar a view <strong>sys.dm_db_resource_stats<\/strong>.<\/p>\n<p>Administramos um banco de dados no Azure onde o cliente n\u00e3o p\u00f4de nos liberar acesso ao portal, mas liberou acesso ao SQL via SSMS. Dessa forma, temos que coletar algumas informa\u00e7\u00f5es via query e popular tabelas para conseguir monitorar melhor o ambiente.<\/p>\n<p>Da\u00ed surgiu a necessidade real de monitorar a <strong>sys.dm_db_resource_stats<\/strong>.<\/p>\n<p>Essa view retorna informa\u00e7\u00f5es de <strong>CPU, I\/O, e consumo de mem\u00f3ria<\/strong> para uma database no Azure. A cada <strong>15 segundos<\/strong> \u00e9 inserida uma linha nessa tabela com informa\u00e7\u00f5es de performance da base, mesmo que n\u00e3o exista atividades na base. Essa DMV mant\u00e9m dados hist\u00f3ricos por <strong>1 hora<\/strong>.<\/p>\n<p>Maiores informa\u00e7\u00f5es sobre a view:\u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/system-dynamic-management-views\/sys-dm-db-resource-stats-azure-sql-database?view=azuresqldb-current\" target=\"_blank\" rel=\"noopener\">docs sys.dm_db_resource_stats<\/a><\/p>\n<p>A\u00ed entra aquele Job para guardar por mais tempo essas informa\u00e7\u00f5es. Vamos criar uma rotina que vai rodar de hora em hora salvando esses dados em uma tabela de hist\u00f3rico.<\/p>\n<p>Segue o script completo no nosso <strong>Github<\/strong>:<\/p>\n<p><a href=\"https:\/\/github.com\/FabricioLimaSolucoesEmBD\/SQLScripts\/blob\/master\/AzureSQLDatabase\/Rotina%20para%20monitorar%20a%20utiliza%C3%A7%C3%A3o%20de%20Recursos%20de%20uma%20base\" target=\"_blank\" rel=\"noopener\">Script rotina para monitorar a utiliza\u00e7\u00e3o de resursos<\/a><\/p>\n<p>Ele vai criar uma tabela de hist\u00f3rico e uma procedure para popular essa tabela.<\/p>\n<p>Ap\u00f3s criar, basta agendar a procedure <strong>stpCarga_Monitoramento_db_resource_stats<\/strong><em><strong>\u00a0<\/strong><\/em>no azure <strong>a cada uma hora.<\/strong><\/p>\n<p>Nesse post abaixo mostrei como voc\u00ea pode fazer esse agendamento:<\/p>\n<p><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/08\/13\/azure-sql-database-como-criar-um-job-para-executar-uma-procedure\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.fabriciolima.net\/blog\/2018\/08\/13\/azure-sql-database-como-criar-um-job-para-executar-uma-procedure\/<\/a><\/p>\n<p>Ap\u00f3s executar uma vez a procedure de carga, j\u00e1 temos as informa\u00e7\u00f5es que precisamos conforme pode ser visto abaixo:<\/p>\n<pre class=\"lang:tsql decode:true\">select top 5 * \r\nfrom Log_db_resource_stats\r\norder by avg_cpu_percent desc<\/pre>\n<p>Segue o resultado ordenado pelos 5 momentos que mais consumiram CPU na minha base de teste:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9522 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans.png\" alt=\"\" width=\"982\" height=\"123\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans.png 1325w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans-300x38.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans-1024x128.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans-768x96.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans-700x88.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans-410x51.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans-100x13.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans-275x34.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/10\/AzureSerie08_Scans-20x3.png 20w\" sizes=\"auto, (max-width: 982px) 100vw, 982px\" \/><\/p>\n<p>\u00c9 uma informa\u00e7\u00e3o bem interessante para termos com um hist\u00f3rio maior. Dessa forma, conseguimos um baseline de mais tempo do comportamento de performance da nossa base no Azure.<\/p>\n<p>Essa foi mais uma dica de como voc\u00ea pode fazer algo por suas bases no Azure SQL Database.<\/p>\n<p>At\u00e9 a pr\u00f3xima.<\/p>\n<p>Posts relacionados sobre o Azure SQL Database:<\/p>\n<ol>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/07\/10\/azure-sql-database-funcao-getdate-com-valor-errado-no-azure-e-isso-mesmo\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Azure SQL Database \u2013 Fun\u00e7\u00e3o getdate() com valor errado no Azure. \u00c9 isso mesmo?<\/a><\/li>\n<li><a href=\"http:\/\/www.fabriciolima.net\/blog\/2018\/03\/17\/azure-sql-db-managed-instance-introducao\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Azure SQL DB Managed Instance \u2013 Introdu\u00e7\u00e3o<\/a><\/li>\n<li><a href=\"http:\/\/www.fabriciolima.net\/blog\/2018\/07\/12\/azure-sql-database-como-fazer-um-join-entre-tabelas-de-bases-diferentes\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Azure SQL Database \u2013 Como fazer um join entre tabelas de bases diferentes?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/07\/17\/azure-sql-database-quanto-posso-usar-de-transaction-log-e-ilimitado\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Azure SQL Database \u2013 Quanto posso usar de Transaction Log? \u00c9 ilimitado?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/08\/13\/azure-sql-database-como-criar-um-job-para-executar-uma-procedure\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Azure SQL Database \u2013 Como criar um Job para executar uma procedure?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/10\/02\/azure-sql-database-monitorando-o-tamanho-das-tabelas\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Azure SQL Database \u2013 Monitorando o Tamanho das Tabelas<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/10\/08\/azure-sql-database-monitorando-a-fragmentacao-dos-indices\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Azure SQL Database \u2013 Monitorando a Fragmenta\u00e7\u00e3o dos \u00cdndices<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/10\/26\/azure-sql-database-monitorando-a-utilizacao-dos-indices\/\" target=\"_blank\" rel=\"noopener\">Azure SQL Database \u2013 Monitorando a Utiliza\u00e7\u00e3o dos \u00cdndices<\/a><\/li>\n<\/ol>\n<p><b>Gostou da dica?<\/b><\/p>\n<p>Curta, comente, compartilhe com os coleguinhas\u2026<\/p>\n<p>Assine meu canal no\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.youtube.com\/channel\/UCeBRAO_LLrUdSrOXIywjzRA\" target=\"_blank\" rel=\"external noopener noreferrer nofollow\" data-wpel-link=\"external\">Youtube<\/a>\u00a0e curta minha\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\" rel=\"external noopener noreferrer nofollow\" data-wpel-link=\"external\">P\u00e1gina no Facebook<\/a>\u00a0para receber Dicas de Leituras e Eventos sobre SQL Server.<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>Microsoft Data Platform MVP<\/p>\n<p>Consultor e Instrutor SQL Server<\/p>\n<p>Trabalha com SQL Server desde 2006<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Fala Pessoal, Continuando a s\u00e9rie de posts sobre\u00a0Azure SQL Database, dessa vez vamos criar uma rotina para que voc\u00ea possa monitorar a view sys.dm_db_resource_stats. Administramos um banco de dados no Azure onde o cliente n\u00e3o p\u00f4de nos liberar acesso ao portal, mas liberou acesso ao SQL via SSMS. Dessa forma, temos que coletar algumas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[1616,280],"tags":[],"class_list":["post-9436","post","type-post","status-publish","format-standard","hentry","category-azure-sql-database","category-virtual-pass-br"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/9436","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/comments?post=9436"}],"version-history":[{"count":5,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/9436\/revisions"}],"predecessor-version":[{"id":9571,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/9436\/revisions\/9571"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=9436"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=9436"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=9436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}