Arquivo
Idera VS Minha Coffee Mug
Recebi um e-mail da Idera falando que eles iriam mandar uma caneca de café e tals.. mas depois de meses esperando não recebi nada, tentei entrar em contato com a Krista por várias vezes e não obtive retorno, daí resolvi mandar um e-mail para uma galera, rs, espero que pelo menos um me responda.
Segue os e-mails que rolaram na integra.
Repare no Cc J
—–Mensagem original—–
De: Fabiano Amorim [mailto:fabiano_amorim@bol.com.br]
Enviada em: quinta-feira, 10 de julho de 2008 09:49
Para: ‘Krista Kirkland’; ‘mike.frank@idera.com’; ‘partners@idera.com’; ‘dynamics@idera.com’; ‘sales@idera.com’; ‘info@idera.com’; ‘matt.fowler@idera.com’; ‘SQLcheck@idera.com’; ‘SQLsmartseditor@Idera.com’; ‘jd@idera.com’; ‘news@idera.com’; ‘latam@idera.com’; ‘emea@idera.com’; ‘uk@idera.com’; ‘press@idera.com’; ‘support@idera.com’; ‘Janette.deyhle@idera.com’; ‘Rick.Pleczko@idera.com’; ‘shekhar.vaidya@idera.com’; ‘Nick.Futter@idera.com’; ‘rod.endo@idera.com’
Cc: Paiva, Sandro; ‘Papa.Bento.XVI@vaticano.com’; ‘FBI@eua.com’; ‘CIA@eua.com’; ‘Interpol@uk.com’; ‘Bope@brazil.com’
Assunto: RES: Idera SQL compliance manager: 14-day evaluation confirmation
Hello, After a lot of contacts with Krista I not received at least one position about what happened with my Coffee Mug.
I’ve send this e-mail just to say, Thanks I don’t want anymore!
Att: Fabiano Neves Amorim.
—–Mensagem original—–
De: Fabiano Amorim [mailto:fabiano_amorim@bol.com.br]
Enviada em: quinta-feira, 27 de março de 2008 08:16
Para: ‘Krista Kirkland’
Assunto: ENC: Idera SQL compliance manager: 14-day evaluation confirmation
Hello, i’m not received the coffee mug yet, What’s happened?
Thanks
—–Mensagem original—–
De: Fabiano Amorim [mailto:fabiano_amorim@bol.com.br]
Enviada em: sexta-feira, 8 de fevereiro de 2008 16:51
Para: ‘Krista Kirkland’
Assunto: RES: Idera SQL compliance manager: 14-day evaluation confirmation
Hi, my mailing address:
Country: Brazil
State: São Paulo
City: Marília
Adress: Rua Pedro Charuto nº 63 apto 823 Postal Code: 17523824
Fone: 551481483039
Thanks Krista.
—–Mensagem original—–
De: Krista Kirkland [mailto:Krista.Kirkland@idera.com]
Enviada em: sexta-feira, 8 de fevereiro de 2008 16:44
Para: Fabiano Amorim
Assunto: RE: Idera SQL compliance manager: 14-day evaluation confirmation
Hi Fabiano –
Thanks for downloading SQL compliance manager!
Yes, please send me your mailing address… that will make it faster for me to get you’re the coffee mug.
Thanks for your interest! Let us know if you have any questions.
Krista
—–Original Message—–
From: Fabiano Amorim [mailto:fabiano_amorim@bol.com.br]
Sent: Friday, February 08, 2008 11:00 AM
To: Krista Kirkland
Subject: ENC: Idera SQL compliance manager: 14-day evaluation confirmation
Hello Krista, I received your e-mail speaking the WebCast "Best Practices with SQL Server Compilance" and Free T-Shirt or a Coffee Mug, I glad to hear it, please send-me one Coffee Mug.
One question! I live in Brazil and I put my address on web form to download Compilance, Do you need something more to send-me a Mug?
Thanks.
—–Mensagem original—–
De: sales@idera.com [mailto:sales@idera.com] Enviada em: sexta-feira, 8 de fevereiro de 2008 14:49
Para: fabiano_amorim@bol.com.br
Assunto: Idera SQL compliance manager: 14-day evaluation confirmation
Dear Fabiano Neves Amorim:
Thank you for evaluating SQL compliance manager, Idera’s powerful auditing and compliance solution, free for 14 days. We recommend that you print and save this email for future reference.
Please follow the steps in this email carefully to unzip, install, and run a fully-functional version of SQL compliance manager. Your trial period will last 14 days, beginning the day you install the software. This license can be used on a maximum of ten instances of SQL Server.
————————————————————
Download SQL compliance manager (50MB) by clicking:
– SQL compliance manager 32-bit
<http://www.idera.com/DownloadManager/IderaSQLcmInstallationKit.zip>
– SQL compliance manager x64
<http://www.idera.com/DownloadManager/IderaSQLcmInstallationKit-x64.zip>
– SQL compliance manager Itanium 2
<http://www.idera.com/DownloadManager/IderaSQLcmInstallationKit-ia64.zip>
* Link expires in 24 hours
How to Install SQL compliance manager:
1. Extract all files from the SQL compliance manager download to a temporary directory with at least 50MB of disk space.
2. Click and run the Installation Kit Program.
3. Review the Quick Start Guide for product requirements and installation steps. To open the Quick Start Guide, click the "How to quickly install and evaluate SQL compliance manager" link on the Setup tab.
4. Install SQL compliance manager. For more information about implementation scenarios, see the User Guide.
————————————————————
If you need assistance during the installation process or during your trial period, please contact Idera Technical Support:
24 x 7 Worldwide Technical Support
Email: support@idera.com
Phone: 713.533.5144
Toll free: 1.877.GO.IDERA (464.3372)
Fax: 713.862.5210
Available 8:30 AM – 5:30 PM Central
Online Chat: www.idera.com/support
Again, thank you for your interest in SQL compliance manager. We will follow up with you in the next 48 hours to ensure that your install was successful.
When the trial period expires, please contact sales@idera.com to purchase a permanent license.
In the meantime, if you have any questions regarding SQL compliance manager or any of Idera’s other SQL Server management and administration solutions, please visit: <http://www.idera.com/> or contact Idera sales directly at 1.877.GO.IDERA (464.3372) or 713.523.4433.
Best regards,
Idera Technical Support
WebCast XML no SQL Server 2005
Estarei apresentando uma WebCast(Treinamento Online) na quarta-feira, 23 de julho de 2008.
Segue o resumo do que será discutido na WebCast e o link para inscrição do evento..
—————————————————————————————————————————————-
|
Visão Geral do Evento |
|
Palestrante: Fabiano Neves Amorim. Veja neste Webcast como gerar e armazenar um XML no SQL Server e quando isto deve ser utilizado. Como utilizar esquemas XSD para a validação de estruturas XML e índices para acelerar consultas entre os elementos. |
Conto com a presença de todos.
SQL Server Beta Exams Extended, Open Invitation
Liberado os exames Beta de SQL Server 2008, o meu já está agendado para dia 18/07 J, caso eu não comente mais sobre isso aqui no site é porque não passei J
|
_________________________________________________________________ |
NOSMOKE.SYS
Diálogo entre um usuário de computador e o técnico da firma
que lhe vendeu o micro:
Técnico: Suporte técnico às suas ordens. No que posso
ajudá-lo?
Usuário: Tem uma fumaça que sai de trás do computador.
Técnico: Provavelmente sua fonte queimou. Vai precisar
trocá-la
Usuário: Nada disso. Só preciso mudar uns arquivos de
configuração
Técnico: Se há uma fumaça saindo da fonte, é a fonte que
está queimada. Será necessário trocar a fonte.
Usuário: Não senhor. Me disseram só preciso trocar a
configuração do sistema para resolver este
problema. Só quero saber qual é o comando.
Depois de dez minutos, apesar dos esforços do técnico para
explicar o problema e a solução, o cliente insiste em ter
razão e exigir que lhe seja dado o comando que vai resolver
o problema. O cliente tendo sempre razão, só resta ao
técnico um meio de agir:
Técnico: Mil desculpas, o senhor tem razão. Nós não
costumamos informar este procedimento aos nosso
clientes, mas existe um comando DOS não documentado
que resolve este problema.
Usuário: Eu sabia!
Técnico: Acrescente a linha "DEVICE=C:\DOS\ NOSMOKE.SYS" no
fim de seu arquivo CONFIG.SYS. Depois dê um novo
boot e tudo vai funcionar. Ligue de novo se tiver
qualquer problema.
Uns dez minutos depois o cliente volta a ligar.
Usuário: Não funcionou. Ainda sai fumaça da fonte…
Técnico: Mas que versão do DOS o senhor está usando?
Usuário: MS-DOS 6.22
Técnico: Aí está o problema! Esta versão do DOS não vem com
o NOSMOKE. Ligue para a Microsoft e peça para lhe
enviarem uma atualização.
Cerca de uma hora depois, o cliente liga novamente.
Usuário: Preciso de uma nova fonte…
Técnico: Muito bem. Posso levá-la aí hoje mesmo. Mas me
diga: como chegou a esta conclusão?
Usuário: Eu liguei para a Microsoft e repeti o que eu lhe
disse. Depois de uma longa discussão, ele me pediu
a marca e o modelo do meu computador.
Técnico: E o que foi que ele disse?
Usuário: Ele disse que minha fonte não é compatível com o
NOSMOKE…
10 pontos que devem ser observados quanto a performance de uma consulta Parte 2
3. Sempre que possível substituir condições com OR por UNION ALL, por ex:
|
SET NOCOUNT ON GO IF OBJECT_ID(‘Teste ‘) IS NOT NULL DROP TABLE Teste GO CREATE TABLE Teste (ID Int Identity(1,1), CPF Char(11), Nome VarChar(200), Sobrenome VarChar(200), Endereco VarChar(200), Bairro VarChar(200), Cidade VarChar(200)) GO — Inclui 1000 mil de linhas na tabela INSERT INTO Teste(CPF, Nome, SobreNome, Endereco, Bairro, Cidade) VALUES(‘11111111111’, NEWID(), ‘Neves Amorim’, NEWID(), NEWID(), NEWID()) GO 1000
CREATE CLUSTERED INDEX ix_ID ON Teste(ID) GO CREATE INDEX ix_Nome ON Teste(Nome) GO
/* Seleciona todos os registros onde ID = 10 ou então o Nome inicia com 38. Esta consulta irá gerar um Scan na tabela pois o OR impede que o SQL use o ix_ID ou o ix_Nome. */ SELECT * FROM Teste WHERE ID = 10 OR Nome Like ‘38%’ GO
/* A instrução acima deve ser trocada por a consulta abaixo que utiliza o UNION ALL */ SELECT Tab.* FROM (SELECT * FROM Teste WHERE ID = 10 UNION ALL SELECT * FROM Teste WHERE Nome Like ‘38%’) AS Tab |
Obs.: Sempre que possível utilize “UNION ALL” ao invés de “UNION” pois o “UNION” gera um distinct que geralmente gera um order by o que irá gerar um custo desnecessário comparado a concatenação do “UNION ALL”.
Continua…
10 pontos que devem ser observados quanto a performance de uma consulta Parte 1
Performance de querys é sem dúvida uma das maiores causadoras de dor de cabeça em DBAs e afins(J), se vocês já leram algum post neste blog devem ter percebido que gosto muito deste assunto, trato diariamente com problemas deste tipo e tem alguns pontos que acho importantes de serem analisados quando falamos em análise de consultas, vou tentar explicar melhor abaixo.
Primeiro vou falar um pouco da empresa onde trabalho a, CNP-M, graças a Deus somos uma empresa certificada MPS.BR pois os processos que foram implantados nos ajudam a diminuir e MUITO possíveis problemas de performance que teríamos e que não deixamos chegar nos clientes pois param no processo de validação. Os pontos que vou mencionar abaixo servem como base para procurar possíveis problemas de performance, bom chega de conversa mole e vamos para a melhor parte(você já sabe, TSQL).
Todas as consultas abaixo foram executadas no banco AdventureWorks / SQL Server 2005.
1. Sempre verificar o plano de execução de cada select existente no código SQL, e analisar o uso ou não uso dos índices de cada tabela pertencente a query.
2. Verificar o uso de Functions. Caso exista alguma function envolvida no SQL analise bem a consulta e verifique se é possível alterar a consulta para fazer um join com a própria tabela ou então até mesmo tabelas temporárias, vamos ver alguns exemplos para ficar mais fácil de entender o que estou querendo dizer.
|
IF OBJECT_ID(‘VendaPorCliente’) IS NOT NULL DROP FUNCTION dbo.VendaPorCliente
GO CREATE FUNCTION dbo.VendaPorCliente(@CustomerID Int) RETURNS Decimal(18,2) AS BEGIN DECLARE @Total Decimal(18,2)
SELECT @Total = SUM(OrderQty * UnitPrice) FROM AdventureWorks.Sales.SalesOrderHeader a INNER JOIN AdventureWorks.Sales.SalesOrderDetail b ON a.SalesOrderID = b.SalesOrderID WHERE a.CustomerID = @CustomerID
RETURN @Total END GO /* Seleciona o total de venda por Customer Aqui temos um problema, pois para cada linha na tabela Customer o SQL Server irá executar a Function VendaPorCliente, ou seja se minha tabela Customer tiver 50000 linhas o SQL irá acessar as tabelas de header e Detail 50000 vezes. */ SELECT AccountNumber, dbo.VendaPorCliente(CustomerID) as Total FROM AdventureWorks.Sales.Customer
/* Para resolver o problema da consuta acima poderiamos fazer o seguinte Criar uma nova function do tipo "multi-statement table-valued" */
IF OBJECT_ID(‘VendaTotalClientes’) IS NOT NULL DROP FUNCTION dbo.VendaTotalClientes
GO CREATE FUNCTION dbo.VendaTotalClientes() RETURNS @tb_result TABLE ( CustomerID Int, Total Decimal(18,2), PRIMARY KEY(CustomerID) ) AS BEGIN INSERT INTO @tb_result SELECT a.CustomerID, SUM(OrderQty * UnitPrice) Total FROM AdventureWorks.Sales.SalesOrderHeader a INNER JOIN AdventureWorks.Sales.SalesOrderDetail b ON a.SalesOrderID = b.SalesOrderID GROUP BY a.CustomerID
RETURN END GO /* Seleciona o total de venda por Customer Desta vez ao invés de acessar a function para cada linha da tabela Customer o SQL Server irá ler os dados das tabelas Header e Detail apenas 1 vez pois a function irá retornar todos os dados em uma tabela. */ SELECT AccountNumber, b.Total FROM AdventureWorks.Sales.Customer a INNER JOIN dbo.VendaTotalClientes() b ON a.CustomerID = b.CustomerID GO /* Agora chegamos onde eu queria!, imagine que eu queria retornar o total de venda apenas do Customer ‘AW00000001’, eu iriá escrever o seguinte select. O que acontece abaixo é que o SQL irá primeiro retornar todos os dados da function, ou seja, todas as vendas por customer e depois aplicar o filtro de AccountNumber = ‘AW00000001’ */ SELECT AccountNumber, b.Total FROM AdventureWorks.Sales.Customer a INNER JOIN dbo.VendaTotalClientes() b ON a.CustomerID = b.CustomerID WHERE a.AccountNumber = ‘AW00000001’ GO /* O ideal neste caso seria usar: */ SELECT AccountNumber, dbo.VendaPorCliente(CustomerID) as Total FROM AdventureWorks.Sales.Customer WHERE AccountNumber = ‘AW00000001’ GO /* Ou então simplesmente não utilizar a function e fazer o select direto nas tabelas */ SELECT a.AccountNumber, SUM(OrderQty * UnitPrice) AS Total FROM AdventureWorks.Sales.Customer a INNER JOIN AdventureWorks.Sales.SalesOrderHeader b ON a.CustomerID = b.CustomerID INNER JOIN AdventureWorks.Sales.SalesOrderDetail c ON b.SalesOrderID = c.SalesOrderID WHERE a.AccountNumber = ‘AW00000001’ GROUP BY a.AccountNumber GO |
Obs.: Atenção, o comando SET STATISTICS IO ON não leva em consideração as leituras efetuadas nas suas functions, o que certas vezes acaba gerando uma má interpretação do comando, portanto fique ligado nisso.
Continua…
Why triggers are Bad – Part II
Segue o post do Conor falando o que ele acha sobre Triggers.
Excelente artigo.
É bom saber que não sou só eu que penso assim, não gosto de triggers e sempre que puder tentarei evita-las, não tenho isso como regra mas como base, o que é diferente.
ALT + Left Click
Puts, essa foi show, eu sabia a do ALT+SHIFT + setas do teclado, mas essa do ALT + Botão Esquerdo do mouse foi sacanagem.
É o tipo da coisa que quando você descobre logo pensa, puts e ninguém me conta?
Update:
Aaa no Dephi e Visual Studio também funciona 🙂
Why Triggers are Bad
I’m talking with Conor about triggers, I try explain why I don’t like triggers, and how they can be bad for performance. He ask-me one sample about bad performance then I create this script on database AdventureWorks, I think he will write in your blog about triggers soon, then keep eye.
If you don’t know him, he blog on SQLSkills, do you need more? J
http://www.sqlskills.com/blogs/conor/default.aspx
IF OBJECT_ID(‘Production.uProduct’) IS NOT NULL
DROP TRIGGER Production.uProduct
GO
CREATE TRIGGER [Production].[uProduct] ON [Production].[Product]
AFTER UPDATE NOT FOR REPLICATION AS
BEGIN
SET NOCOUNT ON;
UPDATE [Production].[Product]
SET [Production].[Product].[ModifiedDate] = GETDATE()
FROM inserted
WHERE inserted.[ProductID] = [Production].[Product].[ProductID];
END;
GO
— Here we have one column called ModifiedDate, and one trigger to update this column.
SELECT ModifiedDate, *
FROM Production.Product
WHERE ProductID = 316
— Now if I update the column Name of the product, the trigger will update the column
— ModifiedDate with the GetDate()
SET STATISTICS PROFILE ON
SET STATISTICS IO ON
UPDATE Production.Product
SET Name = ‘New Blade’
WHERE ProductID = 316
–Table ‘Product’. Scan count 0, logical reads 6, physical reads 4, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
–Table ‘Product’. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SET STATISTICS IO OFF
SET STATISTICS PROFILE OFF
— Whats happened here? First the Update will search for the clustered Index,
— then the Trigger will do the same thing again. On the other hands,
— 2 scans on table Product
IF OBJECT_ID(‘Supper_UpdateProduct’) IS NOT NULL
DROP PROC dbo.Supper_UpdateProduct
GO
— Now lets go create one Stored Procedure to Update the Name and ModifiedDate of the Product
CREATE PROC dbo.Supper_UpdateProduct (@NewName nVarChar(50) = ”, @ProductID Int = 0)
AS
BEGIN
IF @ProductID = 0
BEGIN
UPDATE Production.Product
SET Name = NewID(),
ModifiedDate = GetDate()
END
ELSE
BEGIN
UPDATE Production.Product
SET Name = @NewName,
ModifiedDate = GetDate()
WHERE ProductID = @ProductID
END
END
GO
DISABLE TRIGGER Production.uProduct ON Production.Product;
GO
SET STATISTICS PROFILE ON
SET STATISTICS IO ON
EXEC dbo.Supper_UpdateProduct @NewName = N’My New Blade’, @ProductID = 316
–Table ‘Product’. Scan count 0, logical reads 6, physical reads 4, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SET STATISTICS IO OFF
SET STATISTICS PROFILE OFF
GO
— And now whats happened? The update search for the clustered index only one time.
ENABLE TRIGGER Production.uProduct ON Production.Product;
GO
— Now imagine one worst case,
BEGIN TRAN
GO
SET STATISTICS IO ON
GO
ENABLE TRIGGER Production.uProduct ON Production.Product;
GO
UPDATE Production.Product
SET Name = NEWID()
GO
/*
Table ‘Product’. Scan count 1, logical reads 2075, physical reads 4, read-ahead reads 26, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Product’. Scan count 1, logical reads 1052, physical reads 1, read-ahead reads 6, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Worktable’. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
*/
DISABLE TRIGGER Production.uProduct ON Production.Product;
GO
EXEC dbo.Supper_UpdateProduct
GO
/*
Table ‘Product’. Scan count 1, logical reads 2078, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
*/
ROLLBACK TRAN
Logo SQL Server 2008
Uma vez li um livro chamado “O livro do Icone” do Willian Horton, no livro Willian falava sobre os ícones e telas do Windows 3.11 que ele havia ajudado a criar e é claro os ícones do Windows, valeu a leitura ele falou de alguns conceitos bem interessantes.
Falando nisso, só agora a Microsoft finalmente resolveu criar um Logo descente para o SQL Server, fala sério, da para comparar o Logo do SQL 2005 com o do 2008?





