SQL Server - Como permitir acesso em várias portas TCP no SQL Server?
Durante implementação em um novo cliente, a equipe que prestava serviços responsável pela infraetrutura no cliente perguntou se era possível executar o SQL Server em várias portas TCP. A resposta é sim , é possível.
Para configurar a instancia de Banco de Dados do SQL Server para escutar em uma porta TCP adicional, abra primeiro o SQL Server Configuration Manager. Uma vez aberto, expanda Configuração de Rede do SQL Server e clique em Protocolos para sua instância e, em seguida, expanda Protocolos para e selecione TCP / IP. Depois disso, você pode percorrer todo o caminho e vá para a opção IPAll e clique em propriedades.
Agora, se você tiver um padrão instalado, verá uma porta padrão 1433 listada lá. Se você quiser adicionar qualquer porta adicional aqui, basta adicionar uma nova porta com vírgula por lá. Por exemplo, se você quiser adicionar a porta 1600 juntamente com 1433, poderá especificar portas como 1433,1600.
A imagem a seguir demonstra como você pode configurar o mesmo com o SQL Server Configuration Manager.
Em seguida, você deve obrigatoriamente reiniciar seus serviços do SQL Server para que essa nova porta seja efetivada. Você também pode reiniciar os serviços do SQL Server no SQL Server Configuration Manager.
Certifique-se que o seu firewall permita que o endereço IP e a porta se conectem ao servidor. Como pode ver, é realmente simples configurar o SQL Server para ouvir várias portas TCP.
Um Grande abraços sucesso
Gustavo Damatto
MCSD - Microsoft Certified Solutions Developer
linkedin.com/in/damatto
Ribeirão Preto-SP
terça-feira, 31 de julho de 2018
segunda-feira, 23 de julho de 2018
Procurando uma string em um job (ou step) - SQL Server
Boa tarde pessoal!
Hoje iremos compartilhar de um pequeno, mas bem funcional script para vocês desenvolvedores, que utilizam de jobs (SQL Server Agente) um busca completa por strings dentro do catálogo do banco de dados para encontrar uma determinada string no título do job ou na linha de comando de algum step.
-- Procura por uma string dentro dos Jobs
SELECT
NAME NOME_JOB, STEP_NAME ,COMMAND CODIGO, LAST_RUN_DATE
FROM
MSDB.DBO.SYSJOBS A
JOIN MSDB.DBO.SYSJOBSTEPS B ON A.JOB_ID = B.JOB_ID
WHERE
COMMAND LIKE '%BACKUP%'
ORDER BY
NAME
Estes são os resultados da pesquisa e jobs que contem a respectiva
string 'Backup'
Bom é isso aí pessoal,
Bom uso!
Bom uso!
Gustavo Damatto
MCSD - Microsoft Certified Solutions Developer
linkedin.com/in/damatto
Ribeirão Preto-SP
MCSD - Microsoft Certified Solutions Developer
linkedin.com/in/damatto
Ribeirão Preto-SP
terça-feira, 3 de julho de 2018
Collations vs. Performance No SQL-SERVER
Recentemente me deparo com um fato aparentemente pouco conhecido sobre o SQL Server
- especificamente os Collations do SQL Server e como eles afetam o desempenho.
Durante uma atualização de normalização para seu banco de dados,
um de nossos clientes teve problemas de desempenho estranhos e inconsistentes
e não conseguiu encontrar uma solução por um bom tempo.
Eles tiveram duas perguntas:
1) A consulta original (não normalizada): varreu 2,5 milhões de linhas e foi executada por 3 segundos.
2) A nova consulta (normalizada): varreu 10 milhões de linhas semelhantes e foi executada por 50 segundos.
Cada consulta foi executada em uma tabela diferente, mas os dados nas tabelas eram idênticos
(a diferença era devido à normalização). A coluna que procuramos foi varchar (255) em ambas as tabelas.
Por um tempo, não conseguimos entender a razão da enorme diferença de desempenho.
Algo simplesmente não parecia certo.
Durante minha investigação notei uma intrigante diferença nos planos de execução,
e isso é na primeira consulta (a rápida) que uma conversão implícita foi realizada para a coluna varchar,
mas tal conversão não ocorreu na consulta lenta. No começo eu não prestei atenção porque,
como DBA, eu fui treinado para pensar que o desempenho de HURT de conversões implícitas ou explícitas,
e não o contrário, então isso não poderia ter sido o motivo.
Mas eventualmente (e com um pequeno empurrão) Eu dei uma olhada para descobrir
por que essa conversão estava acontecendo em primeiro lugar.
Descobrimos que o Collation da coluna varchar era diferente entre as duas tabelas.
A primeira tabela tinha um Collation Latin SQL, mas a segunda tabela tinha um agrupamento ANSI
(ou Windows Collation, se você preferir chamá-la assim).
Nós tentamos mudar o Collation da segunda tabela para o Collation SQL também - e pronto!
Nossa consulta agora executada por 5 segundos - 10 vezes mais rápido!
Procurei materiais sobre esse problema e não consegui encontrar muita coisa além desse (aparentemente importante) artigo Microsoft: http://support.microsoft.com/ kb/322112
Notas:
As regras de classificação Unicode são muito mais complexas do que as regras para uma ordem de classificação SQL não-Unicode. Quando o SQL Server compara dados Unicode, os caracteres recebem um peso modificado dinamicamente com base na localidade do agrupamento. Os dados também são modificados por configurações de estilo de comparação, como largura, acento ou sensibilidade do Kana. As rotinas de classificação Unicode suportam comportamentos de ordenação mais inteligentes, como a ordenação de palavras.
[…]
• Se você estiver armazenando e manipulando seus dados usando tipos de dados não-Unicode (char, varchar, text) e estiver usando um collation SQL, as comparações de sequência serão executadas com uma ordem de classificação SQL não-Unicode .
• Se você estiver armazenando e manipulando seus dados usando tipos de dados não-Unicode (char, varchar, text) e estiver usando um collation do Windows, as comparações de sequência serão executadas com as regras de classificação Unicode .
E Isso pode fazer com que determinadas operações que são extraordinariamente dependentes do desempenho da classificação de sequências demorem mais e usem mais CPU do que uma operação semelhante executada com um collation SQL.
• Se você estiver usando tipos de dados Unicode (nchar, nvarchar, ntext), não haverá diferença no comportamento de classificação para o SQL e os collations do Windows. Ambos usarão regras de classificação Unicode.
Em suma, os Windows collation têm um desempenho tão lento quanto os tipos de dados Unicode,
e os SQL Collation executam muito mais rapidamente.
No entanto, a ordem de classificação deve ser levada em consideração porque pode alterar os resultados.
Embora no caso deste cliente, a primeira tabela era a maneira default de qualquer maneira,
então estamos realmente “consertando” a diferença na ordem de classificação (caso ela existisse).
Posteriormente, também testamos o desempenho de um agrupamento binário e concluímos que
ele era ainda mais rápido em consultas que exigiam comparação e agrupamento,
mas funcionava pior em consultas que exigiam classificação. Isso faz sentido,
já que os agrupamentos binários devem ser analisados textualmente antes de serem classificados
- uma operação mais pesada do que fazer o mesmo para collations SQL
- ao contrário de uma operação de comparação que pode ser tão rápida quanto fazer XOR de dois valores.
Conclusão
SQL ou Windows Collations parecem ter outra importancia que precisamos tomar ao projetar um banco de dados
E analisar seu desempenho - mas cuidado! A alteração do collation pode alterar a ordem de classificação do seu texto,
portanto, se o seu aplicativo depender de uma determinada forma de classificação, será necessário garantir que
o seu collation corresponda a melhor performance de classificação.
O mesmo artigo microsoft mencionado acima afirma que alterar índices ou como uma consulta é gravada
fará uma diferença maior do que alterar collations, mas é surpreendente a diferença enorme no desempenho
que um collation causou neste exemplo, e tentamos reescrever a consulta várias vezes e alterando os índices,
mas nada fez uma grande diferença, como o Collation.
Encontrou um cenário semelhante? Problemas semelhantes (ou até mais interessantes - diferentes)?
Conte-nos sobre isso nos comentários!
Ref: Eitan Blumin
Gustavo Damatto
MCSD - Microsoft Certified Solutions Developerlinkedin.com/in/damatto
Ribeirão Preto-SP
MCSD - Microsoft Certified Solutions Developerlinkedin.com/in/damatto
Ribeirão Preto-SP
quarta-feira, 20 de junho de 2018
SQL SERVER - Comparação de desempenho IN vs OR
Esta são algumas daquelas perguntas que nunca envelhecem e algumas perguntas e eu acredito que,
estaremos repetindo por muitos anos no futuro. Outros dia recebi esta pergunta durante meu trabalho.
Questão era sobre Comparação de Desempenho IN vs OR
Embora pessoalmente, eu já tenha respondido a essa pergunta diversas vezes, aqui no blog podemos detalhar melhor.
Pergunta: Qual é a consulta executada mais rapida?
- A consulta com o operador IN
- A consulta com o operador OR
Bem, a resposta é ambos são iguais . Sim, essa é a verdade.
Sim, isso está correto, o mecanismo otimizador do SQL Server mapeia internamente automaticamente todos os valores especificados no operador IN para o operador OR. Como o SQL Server converte IN para OU automaticamente, essas são as principais razões para ambos terem desempenho idêntico.
No entanto, se você examinar cuidadosamente o Operador de Filtro no plano de execução da consulta em que utilizei a condição IN, poderá ver que o plano de execução do SQL Server converteu todos os valores do operador IN para OR automaticamente.
Deixe um comentário e deixe-me saber se você gostaria de ver qualquer comparação de desempenho semelhante.
referências Pinal Dave.
referências Pinal Dave.
sexta-feira, 25 de maio de 2018
SQL Server erro instalação - Updating Permission Setting for File ResumeKeyFilter.Store Failed
SQL Server erro instalação - Updating Permission Setting for File ResumeKeyFilter.Store Failed
Durante a instanlaçao de uma nova instancia SQL Server 2016 no Windows Server 2016.
Fomos surpreendidos por uma falha ate momento não esperada e desconhecida pela equipe.
Configuração de permissão para o arquivo ResumeKeyFilter.Store falhou.
Updating permission setting for file ‘H:\System Volume Information\ResumeKeyFilter.Store’ failed. The file permission setting was supposed to be set to ‘D: P(A;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;OICI;FA;;;CO)(A;OICI;FA;;;S-1-5-80-3880718306-3832830129-1677750213-2598158969-1042248003)’.
Click ‘Retry’ to retry the failed action, or click ‘Cancel’ to cancel this action and continue setup.
* Seu nome de arquivo pode variar, mas as etapas permanecem iguais.
Depois que a permissão foi dada, clicamos na opção "Repetir - Retry" e a configuração foi concluída sem mais nenhum erro.
Espero que isso ajude você a corrigir o erro de instalação.
Durante a instanlaçao de uma nova instancia SQL Server 2016 no Windows Server 2016.
Fomos surpreendidos por uma falha ate momento não esperada e desconhecida pela equipe.
Configuração de permissão para o arquivo ResumeKeyFilter.Store falhou.
Updating permission setting for file ‘H:\System Volume Information\ResumeKeyFilter.Store’ failed. The file permission setting was supposed to be set to ‘D: P(A;OICI;FA;;;BA)(A;OICI;FA;;;SY)(A;OICI;FA;;;CO)(A;OICI;FA;;;S-1-5-80-3880718306-3832830129-1677750213-2598158969-1042248003)’.
Click ‘Retry’ to retry the failed action, or click ‘Cancel’ to cancel this action and continue setup.
* Seu nome de arquivo pode variar, mas as etapas permanecem iguais.
SOLUÇÃO (Fix)
Podemos corrigir o erro acima mencionado, usando essas etapas. Mas observe que essa não é uma idéia muito inteligente para manter os dados na raiz de uma unidade. Devemos criar uma pasta e manter os arquivos do banco de dados dentro do diretório especifico.- Primeiro para ver esta pasta oculta hidden folder(System Volume Information) clique na aba view, selecione Hidden Items e vá para a aba options clique na aba view e desmarque Hide Protected Operating System File (Recomended).
- Vá para a pasta “G: \ System Volume Information” e clique com o botão direito no arquivo ResumeKeyFilter.Store clique em propriedades e na aba de segurança, adicione seu usuário de instalação. Neste caso, era um usuário de domínio, e então adicionamos a conta sob permissão (controle total).
Depois que a permissão foi dada, clicamos na opção "Repetir - Retry" e a configuração foi concluída sem mais nenhum erro.
Espero que isso ajude você a corrigir o erro de instalação.
quinta-feira, 17 de maio de 2018
SQL SERVER - Log De Transações, Identificando os responsáveis
Sexta-feira dia de maldade (famosa frase das sextas-feiras) nos remete a refletir quais os maiores impactos e problemas para um ambiente de produção? UPDATE Sem WHERE ? DROP Table ?
Brincadeiras a parte, neste modulo iremos orientar como ler o log de transações e assim podemos identificar ações, quem descartou uma tabela (DELETE -DROP) Por exemplo, Ou quaisquer outras ações executadas.
O SQL Server transaction log contém registros descrevendo alterações feitas a uma base de dados. Ele armazena informação suficiente para recuperar uma base de dados em um tempo específico no tempo, para refazer ou desfazer uma alteração. Mas, como visualizar seu conteúdo, localizar uma transação específica, ver o que aconteceu e reverter uma alteração como uma remoção de registro acidental.Para visualizar o que está armazenado em um transaction log ativo, ou em um backup de transaction log não é tão simples, abrir o arquivo LDF e TRN em um editor binário ele exibirá registros inteligíveis impossibilitando a leitura direta.
FN_DBLOG
Usando fn_dblog é uma função não documentada no SQL Server que lê a parte ativa de um transaction log. Esta função em si retorna 129 colunas, é recomendado selecionar apenas colunas específicas e filtrar os resultados para um tipo de operação específico, a partir do conjunto de resultados retornados pelo fn_dblog, localize as transações que você quer inspecionar.
* Pré-requisito para monitoração em banco de dados é um banco em modelo de recuperação FULL
Completo, portanto o log de transações registra todos os detalhes necessários.
Por favor, lembre-se, se você estiver usando o SA ou o login do administrador do sistema para acessar o seu sistema, você não será capaz de encontrar um usuário final que alterou sua tabela.
É sempre uma boa ideia criar um login e um usuário diferentes para o seu sistema, principalmente a níveis de acessos específicos, assim, quando você precisar rastrear qualquer usuário, será mais fácil para gestão.
Brincadeiras a parte, neste modulo iremos orientar como ler o log de transações e assim podemos identificar ações, quem descartou uma tabela (DELETE -DROP) Por exemplo, Ou quaisquer outras ações executadas.
O SQL Server transaction log contém registros descrevendo alterações feitas a uma base de dados. Ele armazena informação suficiente para recuperar uma base de dados em um tempo específico no tempo, para refazer ou desfazer uma alteração. Mas, como visualizar seu conteúdo, localizar uma transação específica, ver o que aconteceu e reverter uma alteração como uma remoção de registro acidental.Para visualizar o que está armazenado em um transaction log ativo, ou em um backup de transaction log não é tão simples, abrir o arquivo LDF e TRN em um editor binário ele exibirá registros inteligíveis impossibilitando a leitura direta.
FN_DBLOG
Usando fn_dblog é uma função não documentada no SQL Server que lê a parte ativa de um transaction log. Esta função em si retorna 129 colunas, é recomendado selecionar apenas colunas específicas e filtrar os resultados para um tipo de operação específico, a partir do conjunto de resultados retornados pelo fn_dblog, localize as transações que você quer inspecionar.
1
2
3
4
5
6
| SELECT [ Transaction Id], [ Begin Time ], SUSER_SNAME ([ Transaction SID]) AS [ User ], [ Transaction Name ] FROM fn_dblog ( NULL , NULL ) WHERE [ Transaction Name ] = 'DELETE' GO |
* Pré-requisito para monitoração em banco de dados é um banco em modelo de recuperação FULL
Completo, portanto o log de transações registra todos os detalhes necessários.
Por favor, lembre-se, se você estiver usando o SA ou o login do administrador do sistema para acessar o seu sistema, você não será capaz de encontrar um usuário final que alterou sua tabela.
É sempre uma boa ideia criar um login e um usuário diferentes para o seu sistema, principalmente a níveis de acessos específicos, assim, quando você precisar rastrear qualquer usuário, será mais fácil para gestão.
SQL SERVER - O assistente para restauração de banco de dados no SSMS Management Studio está muito lento.
Recentemente enfrentamos uma situação muito interessante. Para ser muito honesto, eu estava inicialmente perdido por alguns momentos quando descreveram essa situação e queriam que eu resolvesse o erro deles. Eles estavam enfrentando uma situação muito especial em que o SQL Server Management Studio estava funcionando bem, mas quando tentavam restaurar qualquer banco de dados, o Assistente de banco de dados de restauração do SSMS demorava uma eternidade para ser aberto.
Os desenvolvedores ficaram muito surpresos com esse problema e já passaram muito tempo no servidor. Depois de tentativas frustradas, eles decidiram me procurar e queriam que eu resolvesse o erro deles. Vamos ver quais são os vários esforços que tentamos durante a chamada para resolver o problema e qual deles funcionou exatamente.
Falha na tentativa 1: reinstalar o SSMS
Isso não funcionou para nós.
Falha na tentativa 2: instalar a versão mais recente do SSMS
Novamente, assim como a reinstalação do SSMS, a versão mais recente do SQL Server Management Studio não funcionou.
Falha na tentativa 3: aumentar a memória para o sistema operacional
Como estávamos em uma máquina virtual, tentamos aumentar a memória no sistema operacional, mas isso também não foi bem-sucedido.
Falha na tentativa 4: tentativa de restaurar outro banco de dados
Não importa qual banco de dados nós tentamos restaurar o Assistente de banco de dados de restauração do SSMS não apareceria facilmente.
Falha Tentativa 5: Tentei quando o servidor não estava ocupado
Honestamente, isso também não funcionou.
Tentativa Bem-sucedida: Excluir Histórico de Backup
Bem, depois de passar mais de 30 minutos em várias tentativas mal-sucedidas diferentes, assim como um DBA, eu também estava um pouco perdido no momento. No entanto, quando percebi que apenas o seu assistente de banco de dados de restauração é lento, mas nenhuma outra parte no SSMS, de repente me lembrei sobre o histórico de backup.
Sempre que abrimos o Assistente de restauração de banco de dados nesse momento, o SQL Server recupera o histórico inteiro do backup de banco de dados da tabela msdb.dbo.backupset e é exibido na seção Conjuntos de backups a serem restaurados. Eu verifiquei com o DBA e eles não estavam excluindo nenhum histórico de backup como parte do processo de manutenção.
A próxima coisa que fizemos foi excluir o histórico de backup com o seguinte comando, onde eu deletei todo o histórico antes da data de 1º de janeiro de 2018.
Uma vez que eu apaguei o histórico deles, de repente o assistente de banco de dados de restauração começou a abrir muito rapidamente.
Lição aprendida de que você deve ter um plano de manutenção adequado. Excluir o histórico de backup é apenas uma das etapas da tarefa de manutenção, você pode planejar dentro das suas rotinas e criar um plano de manutenção muito robusto que não lhe dará surpresas inesperadas, como descrito em postagem de blog de hoje.
Grande abraços, sucesso.
Os desenvolvedores ficaram muito surpresos com esse problema e já passaram muito tempo no servidor. Depois de tentativas frustradas, eles decidiram me procurar e queriam que eu resolvesse o erro deles. Vamos ver quais são os vários esforços que tentamos durante a chamada para resolver o problema e qual deles funcionou exatamente.
Falha na tentativa 1: reinstalar o SSMS
Isso não funcionou para nós.
Falha na tentativa 2: instalar a versão mais recente do SSMS
Novamente, assim como a reinstalação do SSMS, a versão mais recente do SQL Server Management Studio não funcionou.
Falha na tentativa 3: aumentar a memória para o sistema operacional
Como estávamos em uma máquina virtual, tentamos aumentar a memória no sistema operacional, mas isso também não foi bem-sucedido.
Falha na tentativa 4: tentativa de restaurar outro banco de dados
Não importa qual banco de dados nós tentamos restaurar o Assistente de banco de dados de restauração do SSMS não apareceria facilmente.
Falha Tentativa 5: Tentei quando o servidor não estava ocupado
Honestamente, isso também não funcionou.
Tentativa Bem-sucedida: Excluir Histórico de Backup
Bem, depois de passar mais de 30 minutos em várias tentativas mal-sucedidas diferentes, assim como um DBA, eu também estava um pouco perdido no momento. No entanto, quando percebi que apenas o seu assistente de banco de dados de restauração é lento, mas nenhuma outra parte no SSMS, de repente me lembrei sobre o histórico de backup.
A próxima coisa que fizemos foi excluir o histórico de backup com o seguinte comando, onde eu deletei todo o histórico antes da data de 1º de janeiro de 2018.
1
2
| USE msdb;EXEC sp_delete_backuphistory @oldest_date = '01/01/2018' ; |
Uma vez que eu apaguei o histórico deles, de repente o assistente de banco de dados de restauração começou a abrir muito rapidamente.
Lição aprendida de que você deve ter um plano de manutenção adequado. Excluir o histórico de backup é apenas uma das etapas da tarefa de manutenção, você pode planejar dentro das suas rotinas e criar um plano de manutenção muito robusto que não lhe dará surpresas inesperadas, como descrito em postagem de blog de hoje.
Grande abraços, sucesso.
Assinar:
Postagens (Atom)