Arquivo

Arquivo do Autor

Idera VS Minha Coffee Mug

10 de julho de 2008 Deixe um comentário

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

 

Categorias:Não categorizado

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.

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032382547&EventCategory=4&culture=pt-BR&CountryCode=BR

 

Conto com a presença de todos.

Categorias:SQL Server

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

_________________________________________________________________
Below, you will find two beta exams invitations for SQL Server 2008 DBA 71-432 and SQL Server 2008 BI 71-448. These exams will be available until July 31, 2008.   71-432 You are invited to take beta exam 71-432: TS: Microsoft SQL Server 2008, Implementation…(
read more)

 

Categorias:SQL Server

NOSMOKE.SYS

1 de julho de 2008 2 comentários

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…

Categorias:Entretenimento

10 pontos que devem ser observados quanto a performance de uma consulta Parte 2

27 de junho de 2008 3 comentários

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

27 de junho de 2008 2 comentários

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

18 de junho de 2008 Deixe um comentário

Segue o post do Conor falando o que ele acha sobre Triggers.

 

The Trouble with 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.

 

 

Categorias:SQL Server

ALT + Left Click

17 de junho de 2008 Deixe um comentário

Puts, essa foi show, eu sabia a do ALT+SHIFT + setas do teclado, mas essa do ALT + Botão Esquerdo do mouse foi sacanagem.

 

http://blogs.msdn.com/psssql/archive/2008/06/17/helpful-hint-making-review-of-a-query-plan-easier.aspx

 

É 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 🙂

Categorias:SQL Server

Why Triggers are Bad

17 de junho de 2008 Deixe um comentário

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

Categorias:SQL Server

Logo SQL Server 2008

13 de junho de 2008 Deixe um comentário

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?

 
SQL 2005
 
 
SQL 2008
Categorias:SQL Server