Em Setembro eu novamente tive a honra de palestrar em um SQL Saturday, dessa vez o SQLSat #424 em São Paulo.
É sempre um prazer reencontrar os amigos, sejam eles palestrantes, ex-alunos, contatos que fazemos através de eventos e claro, expandir ainda mais nossa rede de contatos. Soma-se a isso um conteúdo técnico bem legal, temos um evento muito importante no Brasil, e se você ainda não participou de um SQL Saturday, não sabe o que está perdendo.
Nessa edição eu montei uma nova palestra sobre ColumnStore e tentei sair do básico, então não fiquei mostrando exemplos de ganho de performance, mas sim tratei sobre detalhes estruturais e como funciona o armazenamento do dado. E como não apresentei nada sobre o processamento das consultas, considero essa sessão como parte 1 de 2.
Como sempre faço, disponibilizo o material para vocês (PDF e scripts). O nome do arquivo é "Luciano Moreira - ColumnStore Internals - SQLSat424": http://1drv.ms/1GJqZZf
Aproveitando... Está chegando o SQLSat #469 em Brasília. Se você ainda não se inscreveu, não perca tempo: http://www.sqlsaturday.com/469/eventhome.aspx
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
SELECT CAST (power(CrazyIdeas, Curiosity) * (RealLifeExperience + MyMistakes)) / FreeTime) AS VARCHAR(MAX)) FROM MyBrain WITH (NOLOCK, INDEX('idx_Neuron')) WHERE ThingsIThinkIKnow in ('SQL Server', 'DB2', '.NET', 'Cloud')
quarta-feira, 28 de outubro de 2015
terça-feira, 13 de outubro de 2015
PASS Speaker Idol 2015
Compartilho com vocês um desafio legal que eu me propus a fazer…
Neste ano eu me inscrevi e, entre todos os candidatos que aplicaram, eu fui um dos escolhidos para participar do PASS Speaker Idol 2015.
Essa pequena competição começou em 2014 e tem por objetivo testar as habilidades de apresentação de 12 participantes até chegarmos a final, onde será escolhido um vencedor. Como prêmio, o vencedor terá garantido um slot para palestrar no PASS Summit de 2016!
No ano passado a sala da competição ficou lotada, então para este ano estaremos em uma sala que suporta em torno de 250 pessoas e também será transmitido online, portanto vocês poderão acompanhar tudo no conforto de casa, enquanto eu sou avaliado e criticado pelos jurados. E não se preocupe com o tempo, pois são sessões pequenas de 5 minutos, onde temos que fazer nosso melhor e mostrar que temos condição de subir ao palco do PASS Summit 2016.
O link para o anúncio dos competidores está aqui: http://www.dcac.co/your-pass-speaker-idol-2015-top-12-are
No blog do Denny Cherry vocês tem mais informações sobre o PASS Speaker Idol (http://www.dcac.co/blogs)
Wish me luck!
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Neste ano eu me inscrevi e, entre todos os candidatos que aplicaram, eu fui um dos escolhidos para participar do PASS Speaker Idol 2015.
Essa pequena competição começou em 2014 e tem por objetivo testar as habilidades de apresentação de 12 participantes até chegarmos a final, onde será escolhido um vencedor. Como prêmio, o vencedor terá garantido um slot para palestrar no PASS Summit de 2016!
No ano passado a sala da competição ficou lotada, então para este ano estaremos em uma sala que suporta em torno de 250 pessoas e também será transmitido online, portanto vocês poderão acompanhar tudo no conforto de casa, enquanto eu sou avaliado e criticado pelos jurados. E não se preocupe com o tempo, pois são sessões pequenas de 5 minutos, onde temos que fazer nosso melhor e mostrar que temos condição de subir ao palco do PASS Summit 2016.
O link para o anúncio dos competidores está aqui: http://www.dcac.co/your-pass-speaker-idol-2015-top-12-are
No blog do Denny Cherry vocês tem mais informações sobre o PASS Speaker Idol (http://www.dcac.co/blogs)
Wish me luck!
Abraços,
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
quinta-feira, 17 de setembro de 2015
24hs of PASS - Summit Preview
Hoje começa o 24hs of PASS - Summit Preview.
São diversas sessões técnicas para você assistir, não perca!
http://www.sqlpass.org/24hours/2015/summitpreview/Schedule.aspx
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
São diversas sessões técnicas para você assistir, não perca!
http://www.sqlpass.org/24hours/2015/summitpreview/Schedule.aspx
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
[SQLServerDF] Encontro XXVII – Suporte XML nativo no SQL Server 2014/2016
Mais um encontro do grupo SQLServerDF, dessa vez a ideia é abordar o suporte nativo do SQL Server 2014/2016 a XML (eXtensible Markup Language), que será apresentado pelo Rogério Moraes de Carvalho.
A ideia dele é apresentar os principais recursos de suporte nativo do SQL Server 2014/2016 a documentos XML. Além disso, ele tem como objetivo reservar uma parte da apresentação para debater com os participantes sobre casos de uso e quando o uso de XML em bancos de dados relacionais podem simplificar o modelo entidade-relacionamento e a manutenção. Traga seus casos de uso de XML no SQL Server para debatermos e compartilharmos nossas experiências.
De resto vocês já sabem o que fazer, por favor confirmar presença com nome e e-mail no Google Groups. Para aqueles que não estão no grupo, basta ir até http://groups.google.com/group/sqlserverdf, fazer sua inscrição e aguardar minha moderação.
Data e horário: 01/10/2015, das 18h às 20h
Local: Xperts Trainning Center
Palestrante: Rogério Moraes de Carvalho
Título: Suporte XML nativo no SQL Server 2014/2016
Descrição: Nesta sessão será apresentado o suporte XML nativo no SQL Server 2014/2016. O tipo de dado xml, que foi introduzido no SQL Server 2005, e a diferença entre uma coluna “tipada” (validada por uma coleção de XML Schemas) e “não tipada” (sem validação). Os cinco métodos do tipo de dados xml (query, value, exist, modify e nodes), usados para consultar ou modificar uma instância XML armazenada em uma coluna do tipo xml, com suporte parcial a XQuery para consultas de dados XML e a extensão XML DML da Microsoft ao XQuery (insert, delete e replace value of) para modificação de dados XML.
Mini-cv do palestrante:
Rogério Moraes de Carvalho é consultor e instrutor de TI. Ele é MVP em .NET. Trabalha com desenvolvimento de sistemas na plataforma .NET, e outras plataformas, e tem uma grande preocupação em utilizar bem os recursos da infraestrutura de dados utilizada pelos sistemas. Ele procura entender com mais profundidade os recursos das fontes de dados utilizadas nos sistemas, num momento em que a moda do desenvolvedor “moderno, antenado e competente” é codificar o modelo do seu domínio na aplicação e deixar que um framework de mapeamento objeto-relacional gere, automaticamente, o modelo relacional do banco de dados. Ele prefere procurar entender o funcionamento interno do framework de mapeamento-objeto relacional e não ficar dependente dele, uma vez que ele não é capaz de avaliar, por exemplo, quando é melhor estruturar parte dos dados em XML na modelagem de um sistema.
Xperts Trainning Center
SHIS QI 15 Conjunto 8/9 Área especial Bloco D, Subsolo - Lago Sul (ao final da rua)
CEP 71635-565 - Brasília - DF
Telefone: (61) 4063-8177 | 9545-9241
Ponto de referência: Próximo ao Hospital Brasília; Ao lado da escola Red Balloon;
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
A ideia dele é apresentar os principais recursos de suporte nativo do SQL Server 2014/2016 a documentos XML. Além disso, ele tem como objetivo reservar uma parte da apresentação para debater com os participantes sobre casos de uso e quando o uso de XML em bancos de dados relacionais podem simplificar o modelo entidade-relacionamento e a manutenção. Traga seus casos de uso de XML no SQL Server para debatermos e compartilharmos nossas experiências.
De resto vocês já sabem o que fazer, por favor confirmar presença com nome e e-mail no Google Groups. Para aqueles que não estão no grupo, basta ir até http://groups.google.com/group/sqlserverdf, fazer sua inscrição e aguardar minha moderação.
Data e horário: 01/10/2015, das 18h às 20h
Local: Xperts Trainning Center
Palestrante: Rogério Moraes de Carvalho
Título: Suporte XML nativo no SQL Server 2014/2016
Descrição: Nesta sessão será apresentado o suporte XML nativo no SQL Server 2014/2016. O tipo de dado xml, que foi introduzido no SQL Server 2005, e a diferença entre uma coluna “tipada” (validada por uma coleção de XML Schemas) e “não tipada” (sem validação). Os cinco métodos do tipo de dados xml (query, value, exist, modify e nodes), usados para consultar ou modificar uma instância XML armazenada em uma coluna do tipo xml, com suporte parcial a XQuery para consultas de dados XML e a extensão XML DML da Microsoft ao XQuery (insert, delete e replace value of) para modificação de dados XML.
Mini-cv do palestrante:
Rogério Moraes de Carvalho é consultor e instrutor de TI. Ele é MVP em .NET. Trabalha com desenvolvimento de sistemas na plataforma .NET, e outras plataformas, e tem uma grande preocupação em utilizar bem os recursos da infraestrutura de dados utilizada pelos sistemas. Ele procura entender com mais profundidade os recursos das fontes de dados utilizadas nos sistemas, num momento em que a moda do desenvolvedor “moderno, antenado e competente” é codificar o modelo do seu domínio na aplicação e deixar que um framework de mapeamento objeto-relacional gere, automaticamente, o modelo relacional do banco de dados. Ele prefere procurar entender o funcionamento interno do framework de mapeamento-objeto relacional e não ficar dependente dele, uma vez que ele não é capaz de avaliar, por exemplo, quando é melhor estruturar parte dos dados em XML na modelagem de um sistema.
Xperts Trainning Center
SHIS QI 15 Conjunto 8/9 Área especial Bloco D, Subsolo - Lago Sul (ao final da rua)
CEP 71635-565 - Brasília - DF
Telefone: (61) 4063-8177 | 9545-9241
Ponto de referência: Próximo ao Hospital Brasília; Ao lado da escola Red Balloon;
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
sexta-feira, 4 de setembro de 2015
Nível de isolamento e sp_reset_connection
Ajudando um cliente encontrei um comportamento do ADO.NET que eu desconhecia e, sinceramente, acredito que todos que trabalham com ADO.NET deveriam saber.
Cenário: uma mudança no EF 6.1 fez com que este cliente mudasse a aplicação e chamasse explicitamente a instrução SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ao instanciar o DBContext.
O problema surgiu quando a aplicação começa a abrir/utilizar/fechar as conexões, e o nível de isolamento READ UNCOMITTED é mantido.
Minha reação inicial: o ADO.NET não está chamando o sp_reset_connection ao reutilizar a conexão do pool, então pode ser um problema na configuração do pool de conexões.
Ao pesquisar sobre a configuração do pool de conexões me deparei com o comportamento que não conhecia: a sp_reset_connection não redefine o nível de isolamento.
Referências:
O item do Connect foi fechado como by design.
Então suponha o seguinte, você uma aplicação que funciona perfeitamente bem. Um novo módulo é desenvolvido e para uma interface específica você define o nível de isolamento READ UNCOMMITTED ou SERIALIZABLE, quando essa conexão é devolvida para o pool, uma outra classe da sua aplicação pode pegar essa conexão e trabalhar com um nível de isolamento inadequado, causando efeitos colaterais inesperados na aplicação. Nada bom.
Se você é desenvolvedor .NET e já trabalha com o ADO.NET provavelmente já sabe disso, mas achei importante registrar aqui para referência futura.
The devil is in the details…
Quer fazer o teste você mesmo?
Utilize os scripts abaixo para:
1. Criar o banco de dados e deixar uma transação aberta
2. Executar uma aplicação console em C# com pool de conexão habilitado
a. A segunda execução não vai ficar bloqueada (comportamento READ UNCOMMITTED)
3. Executar uma aplicação console em C# com pool de conexão desabilitado
a. A segunda execução vai ficar bloqueada (comportamento READ COMMITTED)
Você pode brincar com o profiler e DMVs para monitorar o comportamento das sessões.
1 - Scripts para testar comportamento (SSMS e VS)
USE master
go
CREATE DATABASE IsolationLevel
go
USE IsolationLevel
go
IF (OBJECT_ID('dbo.TabelaBase') IS NOT NULL)
DROP TABLE dbo.TabelaBase
go
CREATE TABLE dbo.TabelaBase
(Codigo INT IDENTITY NOT NULL PRIMARY KEY,
Nome VARCHAR(100) NOT NULL,
DataHora DATETIME2 NOT NULL DEFAULT SYSDATETIME())
GO
INSERT INTO DBO.TabelaBase (Nome) VALUES ('Sr. Nimbus')
INSERT INTO DBO.TabelaBase (Nome) VALUES ('SQL Server')
INSERT INTO DBO.TabelaBase (Nome) VALUES ('ADO.NET')
GO
-- Monitorar as sessões
-- 1 = read uncommitted
-- 2 = read committed
SELECT session_id, transaction_isolation_level, *
FROM sys.dm_exec_sessions
WHERE program_name = '.Net SqlClient Data Provider'
BEGIN TRANSACTION
UPDATE dbo.TabelaBase SET Nome = 'Luti @ Sr. Nimbus' WHERE Codigo = 1
SELECT @@TRANCOUNT
static void Main(string[] args)
{
SqlConnection con = new SqlConnection("Server=LUTIXPS;Database=IsolationLevel;UID=sa;PWD=.sql2014.;");
// SqlConnection con = new SqlConnection("Server=LUTIXPS;Database=IsolationLevel;UID=sa;PWD=.sql2014.;Pooling=false;");
SqlCommand com = new SqlCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED", con);
con.Open();
com.ExecuteNonQuery();
com.CommandText = "SELECT * FROM dbo.TabelaBase";
SqlDataReader dr = com.ExecuteReader();
while(dr.Read())
{
Console.WriteLine(dr["Nome"].ToString());
}
con.Close();
// novamente...
con.Open();
dr = com.ExecuteReader();
while (dr.Read())
{
Console.WriteLine(dr["Nome"].ToString());
}
con.Close();
}
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Cenário: uma mudança no EF 6.1 fez com que este cliente mudasse a aplicação e chamasse explicitamente a instrução SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ao instanciar o DBContext.
O problema surgiu quando a aplicação começa a abrir/utilizar/fechar as conexões, e o nível de isolamento READ UNCOMITTED é mantido.
Minha reação inicial: o ADO.NET não está chamando o sp_reset_connection ao reutilizar a conexão do pool, então pode ser um problema na configuração do pool de conexões.
Ao pesquisar sobre a configuração do pool de conexões me deparei com o comportamento que não conhecia: a sp_reset_connection não redefine o nível de isolamento.
Referências:
- http://blogs.msdn.com/b/jimmymay/archive/2009/02/02/sp-reset-connection-does-not-reset-transaction-isolation-level-unexpected-behavior-by-design.aspx
- https://connect.microsoft.com/SQLServer/feedback/details/243527/sp-reset-connection-doesnt-reset-isolation-level
O item do Connect foi fechado como by design.
Então suponha o seguinte, você uma aplicação que funciona perfeitamente bem. Um novo módulo é desenvolvido e para uma interface específica você define o nível de isolamento READ UNCOMMITTED ou SERIALIZABLE, quando essa conexão é devolvida para o pool, uma outra classe da sua aplicação pode pegar essa conexão e trabalhar com um nível de isolamento inadequado, causando efeitos colaterais inesperados na aplicação. Nada bom.
Se você é desenvolvedor .NET e já trabalha com o ADO.NET provavelmente já sabe disso, mas achei importante registrar aqui para referência futura.
The devil is in the details…
Quer fazer o teste você mesmo?
Utilize os scripts abaixo para:
1. Criar o banco de dados e deixar uma transação aberta
2. Executar uma aplicação console em C# com pool de conexão habilitado
a. A segunda execução não vai ficar bloqueada (comportamento READ UNCOMMITTED)
3. Executar uma aplicação console em C# com pool de conexão desabilitado
a. A segunda execução vai ficar bloqueada (comportamento READ COMMITTED)
Você pode brincar com o profiler e DMVs para monitorar o comportamento das sessões.
1 - Scripts para testar comportamento (SSMS e VS)
USE master
go
CREATE DATABASE IsolationLevel
go
USE IsolationLevel
go
IF (OBJECT_ID('dbo.TabelaBase') IS NOT NULL)
DROP TABLE dbo.TabelaBase
go
CREATE TABLE dbo.TabelaBase
(Codigo INT IDENTITY NOT NULL PRIMARY KEY,
Nome VARCHAR(100) NOT NULL,
DataHora DATETIME2 NOT NULL DEFAULT SYSDATETIME())
GO
INSERT INTO DBO.TabelaBase (Nome) VALUES ('Sr. Nimbus')
INSERT INTO DBO.TabelaBase (Nome) VALUES ('SQL Server')
INSERT INTO DBO.TabelaBase (Nome) VALUES ('ADO.NET')
GO
-- Monitorar as sessões
-- 1 = read uncommitted
-- 2 = read committed
SELECT session_id, transaction_isolation_level, *
FROM sys.dm_exec_sessions
WHERE program_name = '.Net SqlClient Data Provider'
BEGIN TRANSACTION
UPDATE dbo.TabelaBase SET Nome = 'Luti @ Sr. Nimbus' WHERE Codigo = 1
SELECT @@TRANCOUNT
static void Main(string[] args)
{
SqlConnection con = new SqlConnection("Server=LUTIXPS;Database=IsolationLevel;UID=sa;PWD=.sql2014.;");
// SqlConnection con = new SqlConnection("Server=LUTIXPS;Database=IsolationLevel;UID=sa;PWD=.sql2014.;Pooling=false;");
SqlCommand com = new SqlCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED", con);
con.Open();
com.ExecuteNonQuery();
com.CommandText = "SELECT * FROM dbo.TabelaBase";
SqlDataReader dr = com.ExecuteReader();
while(dr.Read())
{
Console.WriteLine(dr["Nome"].ToString());
}
con.Close();
// novamente...
con.Open();
dr = com.ExecuteReader();
while (dr.Read())
{
Console.WriteLine(dr["Nome"].ToString());
}
con.Close();
}
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Assinar:
Postagens (Atom)

