SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Rubens Guimarães
rubens.guimaraes@e-seth.com.br
Aplicações .NET inteligentes
com escala de dados no Azure
Rubens Guimarães
Diretor de Tecnologia da eSeth
Engenheiro de Software com especialização na
Academia Latino-Americana de Segurança da Informação
e Stanford University - Palo Alto CA
Desenvolve projetos de tecnologia de ponta para empresas
de porte, instituições financeiras, redes de franquias e marcas
reconhecidas na América Latina, EUA e Europa.
www.tecnologianapratica.com/rubensGuimaraes
O volume de informações
digitais produzidas nos últimos
02 anos é equivalente ao volume
produzido em toda a história.
Vai aumentar mais. Machine learning, IoT, Cognitive Services, etc
Relacional
Tabelas, colunas e registros são
estruturas típicas deste tipo de
tecnologia.
Linguagem SQL.
SQL Server, Oracle, MySQL
NoSQL
Capacidades que vão além das
características típicas dos
sistemas gerenciadores
relacionais.
DocumentDB, MongoDB,
Redis, Cassandra, Riak
Abordagem Elástica
corresponde
Demanda x
Capacidade.
Elasticidade
Aumenta ou Diminui
Pode ser automatizada
ou não.
HORIZONTAL X VERTICAL
HORIZONTAL
Mesma estrutura com
dados diferentes.
Tabela A
Tabela B
Tabela C
Tabela A
Tabela B
Tabela C
Tabela A
Tabela B
Tabela C
Tabela A
Tabela B
Tabela C
Estruturas diferentes com
dados diferentes.
Tabela A
Tabela B
Tabela C
Tabela D
Depende do projeto e da capacidade da aplicação executar ações separadas.
Shard Map Manager x
Shard Map Manager
Instale:
Microsoft.Azure.SqlDatabase.ElasticScale.Client
Conecte ao SSMS:
CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH (
TYPE=SHARD_MAP_MANAGER,
LOCATION='myserver.database.windows.net',
DATABASE_NAME='ShardMapDatabase',
CREDENTIAL= SMMUser,
SHARD_MAP_NAME='ShardMap' );
CREATE EXTERNAL TABLE [dbo].[order_line](
[ol_o_id] int NOT NULL,
[ol_d_id] tinyint NOT NULL,
[ol_w_id] int NOT NULL,
[ol_number] tinyint NOT NULL,
[ol_i_id] int NOT NULL,
[ol_delivery_d] datetime NOT NULL,
[ol_amount] smallmoney NOT NULL,
[ol_supply_w_id] int NOT NULL,
[ol_quantity] smallint NOT NULL,
[ol_dist_info] char(24) NOT NULL
)
WITH
(
DATA_SOURCE = MyExtSrc,
SCHEMA_NAME = 'orders',
OBJECT_NAME = 'order_details',
DISTRIBUTION=SHARDED(ol_w_id)
);
.NET – vários DBs
using (var scope = new TransactionScope())
{
using (var conn1 = new SqlConnection(connStrDb1))
{
conn1.Open();
SqlCommand cmd1 = conn1.CreateCommand();
cmd1.CommandText = string.Format("insert into T1 values(1)");
cmd1.ExecuteNonQuery();
}
using (var conn2 = new SqlConnection(connStrDb2))
{
conn2.Open(); var cmd2 = conn2.CreateCommand();
cmd2.CommandText = string.Format("insert into T2 values(2)");
cmd2.ExecuteNonQuery();
}
scope.Complete(); }
INTELIGÊNCIA
Fragmentos quentes
X Fragmentos frios
Isolamento e carga
CONTEINERS
- Isolamento físico dos shardlets.
- Permissões e Controle de exposições.
- Gerenciamento facilitado.
- Permite mover db entre conteiners
sem sair do ar de forma vertical.
AZURE
Elasticidade
Vertical e Horizontal
DESEMPENHO SQL SERVER NO AZURE
1- Direcione o tempdb para a unidade D na VM:
USE MASTER
GO
ALTER DATABASE tempdb MODIFY FILE (NAME= tempdev, FILENAME= ‘D:SQLTEMPtempdb.mdf’)
GO
ALTER DATABASE tempdb MODIFY FILE (name = templog, filename = ‘D:SQLTEMPtemplog.ldf’)
GO
DESEMPENHO SQL SERVER NO AZURE
2- Configurar os serviços do SQL Server para inicialização manual:
3- Criar um script para a cada inicialização da VM a pasta “SQLTEMP” (indicada
no script do passo 1) seja criada na unidade D antes da iniciação dos serviços do
SQL:
$SQLService=”SQL Server (MSSQLSERVER)”
$SQLAgentService=”SQL Server Agent (MSSQLSERVER)”
$tempfolder=”D:SQLTEMP”
if (!(test-path -path $tempfolder)) {
New-Item -ItemType directory -Path $tempfolder
}
Start-Service $SQLService
Start-Service $SQLAgentService
4- Agendar uma tarefa no Windows para execução do script ao inicializar o
servidor:
ANÁLISE
Máximo de solicitações simultâneas
SELECT COUNT(*) AS [Concurrent_Requests] FROM sys.dm_exec_requests R
OU
SELECT COUNT(*) AS [Concurrent_Requests] FROM sys.dm_exec_requests R
INNER JOIN sys.databases D ON D.database_id = R.database_id AND D.name = 'MyDatabase‘
Máximo de sessões
SELECT COUNT(*) AS [Sessions] FROM sys.dm_exec_connections
OU
SELECT COUNT(*) AS [Sessions] FROM sys.dm_exec_connections C
INNER JOIN sys.dm_exec_sessions S ON (S.session_id = C.session_id)
INNER JOIN sys.databases D ON (D.database_id = S.database_id)
WHERE D.name = 'MyDatabase'
ANÁLISE
SELECT
avg(avg_cpu_percent) AS 'Average CPU use in percent',
max(avg_cpu_percent) AS 'Maximum CPU use in percent',
avg(avg_data_io_percent) AS 'Average physical data I/O use in percent',
max(avg_data_io_percent) AS 'Maximum physical data I/O use in percent',
avg(avg_log_write_percent) AS 'Average log write use in percent',
max(avg_log_write_percent) AS 'Maximum log write use in percent',
avg(max_session_percent) AS 'Average % of sessions',
max(max_session_percent) AS 'Maximum % of sessions',
avg(max_worker_percent) AS 'Average % of workers',
max(max_worker_percent) AS 'Maximum % of workers' FROM sys.resource_stats WHERE
database_name = 'userdb1' AND start_time > DATEADD(day, -7, GETDATE());
Os dados são coletados a cada 5 minutos e são mantidos por aproximadamente 35
dias. Essa exibição é útil para uma análise de histórico de longo prazo de como seu
banco de dados SQL usa recursos.
AZURE
Mapa de estudos
azure.microsoft.com/pt-br/documentation/learning-
paths/sql-database-elastic-scale
www.youtube.com/AzureBrasilComunidadeTécnica
Rubens Guimarães
rubens.guimaraes@e-seth.com.br
www.eSeth.com.br

Contenu connexe

Similaire à .Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizontal de bancos de dados no Azure - Rubens Guimarães

Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
Ed W. Jr
 
Desenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosDesenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a Dados
Vitor Silva
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
Marco Pinheiro
 

Similaire à .Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizontal de bancos de dados no Azure - Rubens Guimarães (20)

Alta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no AzureAlta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no Azure
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Bancos de Dados no Azure - Arquiteturas
Bancos de Dados no Azure - ArquiteturasBancos de Dados no Azure - Arquiteturas
Bancos de Dados no Azure - Arquiteturas
 
Azure Weekend 2016 - Bancos de Dados no Azure
Azure Weekend 2016 - Bancos de Dados no AzureAzure Weekend 2016 - Bancos de Dados no Azure
Azure Weekend 2016 - Bancos de Dados no Azure
 
Uso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlUso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sql
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
 
R para Iniciantes
R para IniciantesR para Iniciantes
R para Iniciantes
 
Desenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosDesenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a Dados
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com Asterisk
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com Asterisk
 
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Apostila sql
Apostila sqlApostila sql
Apostila sql
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & Desktop
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Armazenamento Elástico de Dados Relacionais no Azure
Armazenamento Elástico de Dados Relacionais no AzureArmazenamento Elástico de Dados Relacionais no Azure
Armazenamento Elástico de Dados Relacionais no Azure
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
 

Plus de iMasters

Plus de iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 
Clean Architecture - Elton Minetto
Clean Architecture - Elton MinettoClean Architecture - Elton Minetto
Clean Architecture - Elton Minetto
 

.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizontal de bancos de dados no Azure - Rubens Guimarães

  • 1. Rubens Guimarães rubens.guimaraes@e-seth.com.br Aplicações .NET inteligentes com escala de dados no Azure
  • 2. Rubens Guimarães Diretor de Tecnologia da eSeth Engenheiro de Software com especialização na Academia Latino-Americana de Segurança da Informação e Stanford University - Palo Alto CA Desenvolve projetos de tecnologia de ponta para empresas de porte, instituições financeiras, redes de franquias e marcas reconhecidas na América Latina, EUA e Europa.
  • 4. O volume de informações digitais produzidas nos últimos 02 anos é equivalente ao volume produzido em toda a história. Vai aumentar mais. Machine learning, IoT, Cognitive Services, etc
  • 5.
  • 6. Relacional Tabelas, colunas e registros são estruturas típicas deste tipo de tecnologia. Linguagem SQL. SQL Server, Oracle, MySQL NoSQL Capacidades que vão além das características típicas dos sistemas gerenciadores relacionais. DocumentDB, MongoDB, Redis, Cassandra, Riak
  • 7.
  • 8.
  • 10. Elasticidade Aumenta ou Diminui Pode ser automatizada ou não.
  • 12. HORIZONTAL Mesma estrutura com dados diferentes. Tabela A Tabela B Tabela C Tabela A Tabela B Tabela C Tabela A Tabela B Tabela C Tabela A Tabela B Tabela C Estruturas diferentes com dados diferentes. Tabela A Tabela B Tabela C Tabela D Depende do projeto e da capacidade da aplicação executar ações separadas. Shard Map Manager x
  • 13.
  • 14. Shard Map Manager Instale: Microsoft.Azure.SqlDatabase.ElasticScale.Client Conecte ao SSMS: CREATE EXTERNAL DATA SOURCE MyExtSrc WITH ( TYPE=SHARD_MAP_MANAGER, LOCATION='myserver.database.windows.net', DATABASE_NAME='ShardMapDatabase', CREDENTIAL= SMMUser, SHARD_MAP_NAME='ShardMap' ); CREATE EXTERNAL TABLE [dbo].[order_line]( [ol_o_id] int NOT NULL, [ol_d_id] tinyint NOT NULL, [ol_w_id] int NOT NULL, [ol_number] tinyint NOT NULL, [ol_i_id] int NOT NULL, [ol_delivery_d] datetime NOT NULL, [ol_amount] smallmoney NOT NULL, [ol_supply_w_id] int NOT NULL, [ol_quantity] smallint NOT NULL, [ol_dist_info] char(24) NOT NULL ) WITH ( DATA_SOURCE = MyExtSrc, SCHEMA_NAME = 'orders', OBJECT_NAME = 'order_details', DISTRIBUTION=SHARDED(ol_w_id) );
  • 15. .NET – vários DBs using (var scope = new TransactionScope()) { using (var conn1 = new SqlConnection(connStrDb1)) { conn1.Open(); SqlCommand cmd1 = conn1.CreateCommand(); cmd1.CommandText = string.Format("insert into T1 values(1)"); cmd1.ExecuteNonQuery(); } using (var conn2 = new SqlConnection(connStrDb2)) { conn2.Open(); var cmd2 = conn2.CreateCommand(); cmd2.CommandText = string.Format("insert into T2 values(2)"); cmd2.ExecuteNonQuery(); } scope.Complete(); }
  • 17. CONTEINERS - Isolamento físico dos shardlets. - Permissões e Controle de exposições. - Gerenciamento facilitado. - Permite mover db entre conteiners sem sair do ar de forma vertical.
  • 19. DESEMPENHO SQL SERVER NO AZURE 1- Direcione o tempdb para a unidade D na VM: USE MASTER GO ALTER DATABASE tempdb MODIFY FILE (NAME= tempdev, FILENAME= ‘D:SQLTEMPtempdb.mdf’) GO ALTER DATABASE tempdb MODIFY FILE (name = templog, filename = ‘D:SQLTEMPtemplog.ldf’) GO
  • 20. DESEMPENHO SQL SERVER NO AZURE 2- Configurar os serviços do SQL Server para inicialização manual: 3- Criar um script para a cada inicialização da VM a pasta “SQLTEMP” (indicada no script do passo 1) seja criada na unidade D antes da iniciação dos serviços do SQL: $SQLService=”SQL Server (MSSQLSERVER)” $SQLAgentService=”SQL Server Agent (MSSQLSERVER)” $tempfolder=”D:SQLTEMP” if (!(test-path -path $tempfolder)) { New-Item -ItemType directory -Path $tempfolder } Start-Service $SQLService Start-Service $SQLAgentService 4- Agendar uma tarefa no Windows para execução do script ao inicializar o servidor:
  • 21. ANÁLISE Máximo de solicitações simultâneas SELECT COUNT(*) AS [Concurrent_Requests] FROM sys.dm_exec_requests R OU SELECT COUNT(*) AS [Concurrent_Requests] FROM sys.dm_exec_requests R INNER JOIN sys.databases D ON D.database_id = R.database_id AND D.name = 'MyDatabase‘ Máximo de sessões SELECT COUNT(*) AS [Sessions] FROM sys.dm_exec_connections OU SELECT COUNT(*) AS [Sessions] FROM sys.dm_exec_connections C INNER JOIN sys.dm_exec_sessions S ON (S.session_id = C.session_id) INNER JOIN sys.databases D ON (D.database_id = S.database_id) WHERE D.name = 'MyDatabase'
  • 22. ANÁLISE SELECT avg(avg_cpu_percent) AS 'Average CPU use in percent', max(avg_cpu_percent) AS 'Maximum CPU use in percent', avg(avg_data_io_percent) AS 'Average physical data I/O use in percent', max(avg_data_io_percent) AS 'Maximum physical data I/O use in percent', avg(avg_log_write_percent) AS 'Average log write use in percent', max(avg_log_write_percent) AS 'Maximum log write use in percent', avg(max_session_percent) AS 'Average % of sessions', max(max_session_percent) AS 'Maximum % of sessions', avg(max_worker_percent) AS 'Average % of workers', max(max_worker_percent) AS 'Maximum % of workers' FROM sys.resource_stats WHERE database_name = 'userdb1' AND start_time > DATEADD(day, -7, GETDATE()); Os dados são coletados a cada 5 minutos e são mantidos por aproximadamente 35 dias. Essa exibição é útil para uma análise de histórico de longo prazo de como seu banco de dados SQL usa recursos.