Estou usando o driver ODBC da Microsoft em um sistema Linux para conectar ao SQL Server 2012 no Windows para usar o recurso de notificação de consulta . Eu corro meu código C e posso ver minha assinatura aparecer sys.dm_qn_subscriptions
como eu esperava, então meu código envia um WAITFOR
e bloqueia - tudo bem até agora. Então eu faço uma transação que acionará a notificação, e eu a recebo - ainda bem. O que eu gostaria de fazer é processar a notificação e fazer um loop novamente, WAITFOR
mas após a primeira notificação, minha assinatura não aparece mais no DMV. Minha pergunta é: esse é o comportamento pretendido e eu devo me inscrever novamente sempre ou algo estranho está acontecendo?
Gaius's questions
Postgres tem um limite de 32T em uma única tabela , mas e se a tabela for particionada - são 32T por partição agora?
Espero que seja simples, se eu tiver dois .sqlplan
arquivos (bastante complexos, de 30 a 40 nós) (do mesmo texto SQL), qual é uma boa maneira de compará-los lado a lado? Ou apenas peça para me dizer o que fez de diferente? O Management Studio está sendo particularmente ridículo ao dispô-los com grandes quantidades de espaço em branco e não me permite reformatá-los para imprimir em uma única página, mesmo ...
Obrigado!
Outra pergunta do servidor SQL: tenho uma consulta simples que me fornece o SQL mais intensivo da CPU desde que os contadores foram redefinidos:
select top 10
sum(qs.total_worker_time) as total_cpu_time,
sum(qs.execution_count) as total_execution_count,
qs.plan_handle, st.text
from
sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.plan_handle) as st
group by qs.plan_handle, st.text
order by sum(qs.total_worker_time) desc
Pergunta 1: O que exatamente é o plan_handle
? Não parece ser um hash do plano, como no Oracle. Pergunto porque quero poder detectar a situação em que o plano de um enunciado mudou.
Pergunta 2: Depois de ter um plan_handle, estou interessado no plano real. Então eu faço, por exemplo:
select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)
Na coluna query_plan recebo um link que quando clico exibe um documento XML. Se eu salvá-lo no disco como qualquer.sqlplan, posso clicar duas vezes nele no Windows e ele é exibido corretamente no Management Studio. Certamente deve haver uma maneira de evitar esta etapa?!
Questão 3: Existe uma maneira de converter o XML de volta em um formato textual, como nos velhos tempos de SET SHOWPLAN_TEXT? Quero poder visualizá-los graficamente, mas também automatizar a diferenciação de alguma forma significativa.
Obrigado!
Eu tenho um SQL Server 2005 que se tornou imprevisível ultimamente e estou coçando a cabeça para saber o porquê. As consultas que são executadas em segundos estão mudando de planos e demorando minutos (tomando o tempo em full table scan ou index spool). Agora, a primeira e mais óbvia coisa é que as estatísticas estão obsoletas, fazendo com que o otimizador fique confuso, mas estou convencido de que não é o caso - primeiro porque os dados subjacentes não estão mudando significativamente (por exemplo, adicionando os dados de um dia sobre os dados de um ano já em uma tabela) e, em segundo lugar, porque as estatísticas de criação automática e as estatísticas de atualização automática são verdadeiras. No entanto, o otimizador está ficando confuso; executar o SQL no Tuning Advisor me dá muitas instruções de várias colunas CREATE STATISTICS
que parecem corrigi-lo (até que o próximo bit do SQL se comporte mal).
Alguma ideia de uma estratégia que eu possa usar para abordar a causa raiz disso? Por que as estatísticas "normais" não são suficientes?
Eu tenho um banco de dados Sybase de terceiros, ao qual meus usuários gostariam de se conectar e consultar a partir de uma máquina Linux, usando iSQL . Eu instalei UnixODBC e FreeTDS . No entanto, como é um banco de dados de terceiros, não consigo executar nenhum GRANT. A consulta falha com o iSQL no Linux:
[42501][unixODBC][FreeTDS][SQL Server]ASA Error -121: Permission denied: you do not have permission to use the "CREATE PROCEDURE" statement
Parece que o SQL real que está sendo enviado pelo iSQL é CREATE PROCEDURE <some temporary name> AS <the actual sql>
. Eu li as páginas de manual iSQL e FreeTDS, mas não há nenhuma dica sobre como desabilitar esse comportamento.
Isso funciona bem em Python:
>>> import Sybase
>>> db = Sybase.connect('host:port', 'user', 'password', 'db')
>>> c = db.cursor()
>>> c.execute('select table_name from systable')
>>> len(c.fetchall())
570
Portanto, acredito que instalei as bibliotecas do cliente Sybase corretamente. Antes de recomendar esta solução, posso, como DBA, fazer alguma coisa para corrigir o iSQL?