Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Elasticidade e engenharia de banco de dados para alta performance - Rubens Guimarães

46 views

Published on

Rubens Guimarães - CEO, e-Seth

Como projetar e colocar em prática bancos de dados inteligentes SQL e NoSQL em ambientes de alto consumo de dados.
Técnicas de sharding, tunning, elasticidade automatizada em ambientes cloud e outros recursos.

Apresentado no InterCon 2018 - https://eventos.imasters.com.br/intercon

Published in: Software
  • Be the first to comment

  • Be the first to like this

Elasticidade e engenharia de banco de dados para alta performance - Rubens Guimarães

  1. 1. Rubens Guimarães rubens.guimaraes@e-seth.com.br www.AzureAcademy.com.br Elasticidade e Engenharia de banco de dados para alta performance
  2. 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.
  3. 3. www.tecnologianapratica.com/rubensGuimaraes
  4. 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. 5. 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
  6. 6. Abordagem Elástica corresponde Demanda x Capacidade.
  7. 7. Elasticidade Aumenta ou Diminui Pode ser automatizada ou não.
  8. 8. HORIZONTAL X VERTICAL
  9. 9. 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
  10. 10. TUNNING PERIÓDICO SET NOCOUNT ON; DECLARE @objectid int; DECLARE @indexid int; DECLARE @partitioncount bigint; DECLARE @schemaname nvarchar(130); DECLARE @objectname nvarchar(130); DECLARE @indexname nvarchar(130); DECLARE @partitionnum bigint; DECLARE @partitions bigint; DECLARE @frag float; DECLARE @command nvarchar(4000); SELECT object_id AS objectid, index_id AS indexid, partition_number AS partitionnum, avg_fragmentation_in_percent AS frag INTO #work_to_do FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0; DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do; OPEN partitions;
  11. 11. TUNNING PERIÓDICO WHILE (1=1) BEGIN; FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag; IF @@FETCH_STATUS < 0 BREAK; SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name) FROM sys.objects AS o JOIN sys.schemas as s ON s.schema_id = o.schema_id WHERE o.object_id = @objectid; SELECT @indexname = QUOTENAME(name) FROM sys.indexes WHERE object_id = @objectid AND index_id = @indexid; SELECT @partitioncount = count (*) FROM sys.partitions WHERE object_id = @objectid AND index_id = @indexid; -- 10 is an arbitrary decision point at which to switch between reorganizing and rebuilding. IF @frag < 10.0 SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE'; IF @frag >= 10.0 SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD'; IF @partitioncount > 1 SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10)); EXEC (@command); PRINT N'Executed: ' + @command; END;
  12. 12. 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) );
  13. 13. .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(); }
  14. 14. INTELIGÊNCIA Fragmentos quentes X Fragmentos frios Isolamento e carga
  15. 15. 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.
  16. 16. AZURE Elasticidade Vertical e Horizontal
  17. 17. PowerBI – Fonte de dados
  18. 18. Azure prepara os dados
  19. 19. AZURE DATA FACTORY Serviço de integração de dados baseado em nuvem que automatiza a movimentação e a transformação dos dados. SQL Server Oracle MySQL MongoDb PostgreSQL Sybase Cassandra DB2 Teradata Amazon Redshift
  20. 20. 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
  21. 21. 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:
  22. 22. 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'
  23. 23. 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.
  24. 24. www.youtube.com/AzureBrasilComunidadeTécnica
  25. 25. Rubens Guimarães rubens.guimaraes@e-seth.com.br www.eSeth.com.br

×