Olá,
Mais uma dica sobre SQL SERVER.
Para listar informações sobre os índices em uma tabela podemos usar o comando abaixo:
EXEC sp_helpindex 'Cidade'
Se os índices tiverem sido definidos com o uso da opção NORECOMPUTE de UPDATE
STATISTICS, essas informações serão incluídas na coluna
index_description.
sp_helpindex expõe apenas as colunas de índices que podem
ser solicitadas; por isso, não expõe informações sobre índices XML ou índices
espaciais.
http://msdn.microsoft.com/pt-br/library/ms188771(SQL.105).aspx
terça-feira, 7 de agosto de 2012
DICA: Saber se sua base tem o maior consumo de índice com consultas ou escritas?
Olá,
Segue mais uma dica de SQL Server.
Para saber qual é a caracteristica predominante em sua base de dados em relação a utilização dos indices, executem o script abaixo:
SELECT
CAST(SUM(user_seeks + user_scans + user_lookups) AS decimal) / CAST(SUM(user_updates) + SUM(user_seeks + user_scans + user_lookups) AS decimal) * 100 AS ReadPercent ,
CAST(SUM(user_updates) AS decimal) / CAST(SUM(user_updates) + SUM(user_seeks + user_scans + user_lookups) AS decimal) * 100 AS WriteRatio
FROM
sys.dm_db_index_usage_stats
Ele irá apresentar o percentual de utilização do mesmo.
Com essa dica você terá a noção se poderá criar índices sem ter muita preocupação com perca de desempenho em operações do tipo (Insert, Update e Delete).
Até a próxima.
Segue mais uma dica de SQL Server.
Para saber qual é a caracteristica predominante em sua base de dados em relação a utilização dos indices, executem o script abaixo:
SELECT
CAST(SUM(user_seeks + user_scans + user_lookups) AS decimal) / CAST(SUM(user_updates) + SUM(user_seeks + user_scans + user_lookups) AS decimal) * 100 AS ReadPercent ,
CAST(SUM(user_updates) AS decimal) / CAST(SUM(user_updates) + SUM(user_seeks + user_scans + user_lookups) AS decimal) * 100 AS WriteRatio
FROM
sys.dm_db_index_usage_stats
Ele irá apresentar o percentual de utilização do mesmo.
Com essa dica você terá a noção se poderá criar índices sem ter muita preocupação com perca de desempenho em operações do tipo (Insert, Update e Delete).
Até a próxima.
Tipos de índices SQL SERVER
Olá,
Nesse breve artigo sobre vamos abordar os tipos de índices existentes no SQL Server.
Clusterizado
O índice clusterizado classifica e armazena as linhas de dados da tabela ou exibição em uma ordem com base na chave do índice clusterizado. O índice clusterizado é implementado como uma estrutura de índice da árvore B que oferece suporte à recuperação rápida de linhas com base em seus valores da chave de índice clusterizado.
Não clusterizado
Um índice não clusterizado pode ser definido em uma tabela ou exibição com um índice clusterizado ou em um heap. Cada linha do índice não clusterizado contém o valor da chave não clusterizada e um localizador de linha. Esse localizador aponta para a linha de dados no índice clusterizado ou heap que possui o valor da chave. As linhas do índice são armazenadas na ordem dos valores da chave de índice, mas não há garantias de que as linhas de dados estejam em uma determinada ordem, a menos que um índice clusterizado seja criado na tabela.
Exclusivo
Um índice exclusivo garante que a chave de índice não contenha valores duplicados; portanto, cada linha em uma tabela ou exibição é, de alguma forma, única.
Tanto os índices clusterizados quanto os não clusterizados podem ser exclusivos.
Índice com colunas incluídas
Um índice não clusterizado que é estendido para incluir colunas que não são de chave, além das colunas de chave.
Texto completo
Nesse breve artigo sobre vamos abordar os tipos de índices existentes no SQL Server.
Clusterizado
O índice clusterizado classifica e armazena as linhas de dados da tabela ou exibição em uma ordem com base na chave do índice clusterizado. O índice clusterizado é implementado como uma estrutura de índice da árvore B que oferece suporte à recuperação rápida de linhas com base em seus valores da chave de índice clusterizado.
Não clusterizado
Um índice não clusterizado pode ser definido em uma tabela ou exibição com um índice clusterizado ou em um heap. Cada linha do índice não clusterizado contém o valor da chave não clusterizada e um localizador de linha. Esse localizador aponta para a linha de dados no índice clusterizado ou heap que possui o valor da chave. As linhas do índice são armazenadas na ordem dos valores da chave de índice, mas não há garantias de que as linhas de dados estejam em uma determinada ordem, a menos que um índice clusterizado seja criado na tabela.
Exclusivo
Um índice exclusivo garante que a chave de índice não contenha valores duplicados; portanto, cada linha em uma tabela ou exibição é, de alguma forma, única.
Tanto os índices clusterizados quanto os não clusterizados podem ser exclusivos.
Índice com colunas incluídas
Um índice não clusterizado que é estendido para incluir colunas que não são de chave, além das colunas de chave.
Texto completo
| Um tipo especial de índice funcional com base em token que é criado e mantido pelo Mecanismo de Texto Completo da Microsoft para o SQL Server. Ele fornece suporte eficiente para pesquisas sofisticadas de palavras em dados de cadeias de caracteres. Espacial Um índice espacial fornece a habilidade de realizar determinadas operações de forma mais eficiente em objetos espaciais (dados espaciais) em uma coluna do tipo de dados geometria. O índice espacial reduz o número de objetos nos quais operações espaciais relativamente dispendiosas precisam ser aplicadas. Filtrado Um índice não clusterizado aperfeiçoado, especialmente indicado para abranger consultas que selecionam de um subconjunto bem definido de dados. Ele usa um predicado de filtro para indexar uma parte das linhas da tabela. Um índice filtrado bem projetado pode melhorar o desempenho das consultas e reduzir os custos de manutenção e armazenamento do índice em comparação com os índices de tabela completa. XML Uma representação fragmentada e persistente de BLOBS (objetos grandes binários) XML na coluna de tipo de dados xml. http://msdn.microsoft.com/pt-br/library/ms175049(v=sql.105) |
segunda-feira, 6 de agosto de 2012
Monitorar CPU SQL SERVER
Olá,
Segue aqui uma dica muito interessante, onde pode ajudar muitos administradores do SQL Server que não tem acesso a máquina, monitorar o consumo de CPU tanto do Servidor quanto ao do SQL Server.
Para conseguir acessar esse recurso vamos utilizar asDMV
sys.dm_os_sys_info (Transact-SQL)
Essa DMV retorna informações sobre o computador no qual o SQL Server foi instalado, inclusive os recursos disponíveis e consumidos pelo SQL Server.
WITH MonitorCPUSQLSERVER AS
(
SELECT DATEADD(ms,(select [ms_ticks]-[timestamp] from sys.dm_os_sys_info),
GETDATE()) AS 'EventDateTime',
CAST(record AS xml) AS 'record'
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR'
AND [timestamp] > (select [ms_ticks] - 30*60000 -- Visualizar os ultimos 30 min.
from sys.dm_os_sys_info)
)
SELECT
CONVERT (varchar, EventDateTime, 126) AS EventTime,
SysHealth.value('ProcessUtilization[1]','int') AS 'CPU (SQL Server)',
100 - SysHealth.value('SystemIdle[1]','int') AS 'CPU (Todos os Processos)'
FROM MonitorCPUSQLSERVER CROSS APPLY record.nodes('/Record/SchedulerMonitorEvent/SystemHealth') T(SysHealth)
ORDER BY EventDateTime DESC
É isso espero que essa dica seja util!
Segue aqui uma dica muito interessante, onde pode ajudar muitos administradores do SQL Server que não tem acesso a máquina, monitorar o consumo de CPU tanto do Servidor quanto ao do SQL Server.
Para conseguir acessar esse recurso vamos utilizar asDMV
sys.dm_os_sys_info (Transact-SQL)
Essa DMV retorna informações sobre o computador no qual o SQL Server foi instalado, inclusive os recursos disponíveis e consumidos pelo SQL Server.
WITH MonitorCPUSQLSERVER AS
(
SELECT DATEADD(ms,(select [ms_ticks]-[timestamp] from sys.dm_os_sys_info),
GETDATE()) AS 'EventDateTime',
CAST(record AS xml) AS 'record'
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR'
AND [timestamp] > (select [ms_ticks] - 30*60000 -- Visualizar os ultimos 30 min.
from sys.dm_os_sys_info)
)
SELECT
CONVERT (varchar, EventDateTime, 126) AS EventTime,
SysHealth.value('ProcessUtilization[1]','int') AS 'CPU (SQL Server)',
100 - SysHealth.value('SystemIdle[1]','int') AS 'CPU (Todos os Processos)'
FROM MonitorCPUSQLSERVER CROSS APPLY record.nodes('/Record/SchedulerMonitorEvent/SystemHealth') T(SysHealth)
ORDER BY EventDateTime DESC
É isso espero que essa dica seja util!
quarta-feira, 4 de julho de 2012
Stored Procedure - Parâmetros de Entrada e Saída
STORED PROCEDURE
Stored Procedure é um grupo de instruções Transact-SQL compiladas em um único plano de execução. As
Stored Procedures podem ajudá-los a conseguir uma implementação consistente da lógica nos aplicativos.
Stored Procedures são semelhantes às linguagens de programação, pois podem conter:
- Parâmetros de entrada e retornar vários valores na forma de parâmetros de saída para o procedimento ou lote de chamada
- Instruções de programação que executem operações no banco de dados, incluindo chamadas para outros procedimentos.
- Retornar um valor de status para um procedimento ou lote de chamada a fim de indicar êxito ou falha (e a razão da falha).
Para executar um Stored Procedure você pode utilizar o comando EXECUTE, veremos a seguir sua utilização na pratica.
Podemos criar a Stored Procedure utilizado o comando CREATE PROCEDURE do Transact-SQL.
Para nomear a Stored Procedure não é recomendável utilizar sp_ como prefixo, pois o SQL Server usa esse prefixo para Stored Procedure do banco de dados.
Para criar nosso exemplo utilizarei a versão Express do SQL Server 2008, no qual pode ser baixada
gratuitamente no site da Microsoft.
Nesse exemplo irei utilizar a base de dados AdventureWorks, também pode efetuar o download no site da Microsoft.
Nesse exemplo vamos criar uma Stored Procedure onde informamos o código do departamento como parâmetro de entrada a o procedimento retornará o result set.
No exemplo a seguir vamos criar uma Stored Procedure onde vamos receber um valor de retorno, nesse caso será necessário informar o OUTPUT.
Parâmetros de entrada
Os parâmetros de entrada permitem que o comando passe um valor de dados para Stored Procedure
Parâmetros de saída
Os parâmetros de saída permitem que o Stored Procedure passe um valor de dados ou uma variável de cursor de volta para o comando. As funções definidas pelo usuário não podem especificar parâmetros de saída.
Valores de retorno
Toda Stored Procedure retorna um código de retorno de inteiro ao comando. Se o procedimento armazenado não definir um valor explicitamente para o código de retorno, este será 0.
Existem diversos comandos que não foram abordados nesse artigo, porem o processo pode ajudar muita mais do que os exemplos acima.
quinta-feira, 24 de maio de 2012
C# para Android
Já pensou em desenvolver em C# para Android?
A Oracle e o Google estão em uma briga de US$ 1 bilhão por causa do uso do Java pelo Google no Android. Mas Java não é a única e nem mesmo a melhor forma de criar aplicativos nativos na plataforma.
A Xamarin, especializada em plataformas cruzadas para dispositivos móveis, oferece a plataforma Mono, uma implementação open source do framework .NET que permite escrever códigos utilizando C# para rodar em sistemas operacionais baseados em Java, e então compartilhar com iOS e Windows Phone.
Ao contrário da Sun com o Java, a Microsoft submeteu o C# e o .NET VM para padronização do ECMA e viu esses padrões serem aprovados de ponta a ponta, até o compromisso com patentes do ISO. O framework .NET também está coberto pela promessa legal da Microsoft junto à comunidade.
A Oracle e o Google estão em uma briga de US$ 1 bilhão por causa do uso do Java pelo Google no Android. Mas Java não é a única e nem mesmo a melhor forma de criar aplicativos nativos na plataforma.
A Xamarin, especializada em plataformas cruzadas para dispositivos móveis, oferece a plataforma Mono, uma implementação open source do framework .NET que permite escrever códigos utilizando C# para rodar em sistemas operacionais baseados em Java, e então compartilhar com iOS e Windows Phone.
Ao contrário da Sun com o Java, a Microsoft submeteu o C# e o .NET VM para padronização do ECMA e viu esses padrões serem aprovados de ponta a ponta, até o compromisso com patentes do ISO. O framework .NET também está coberto pela promessa legal da Microsoft junto à comunidade.
sexta-feira, 6 de abril de 2012
AppSettings no arquivo web.config
O ASP.NET fornece um sistema de configuração que pode usar para manter as nossas aplicações flexíveis em tempo de execução. Neste artigo, vamos examinar algumas dicas e melhores práticas para utilizar o sistema de configuração para os melhores resultados.
O elemento <appSettings> de um arquivo web.config é um lugar para armazenar seqüências de conexão, nomes de servidores, caminhos de arquivo e outras configurações variados necessários por um aplicativo para executar o trabalho. Os itens dentro appSettings são itens que precisam ser configurável, dependendo do ambiente, por exemplo, as seqüências de conexão do banco de dados irá mudar à medida que você move seu aplicativo de um servidor de teste e testes em produção.
O elemento <appSettings> de um arquivo web.config é um lugar para armazenar seqüências de conexão, nomes de servidores, caminhos de arquivo e outras configurações variados necessários por um aplicativo para executar o trabalho. Os itens dentro appSettings são itens que precisam ser configurável, dependendo do ambiente, por exemplo, as seqüências de conexão do banco de dados irá mudar à medida que você move seu aplicativo de um servidor de teste e testes em produção.
NameSpace: System.Configuration
Assembly: (system.configurarion.dll)
O exemplo a seguir mostra como usuar o APPSETTINGS.
No arquivo web.config é necessário incluir dentro de configuration a seguinte seção.
<appSettings>
<add key="TCPSENDTIMEOUT" value="10000"/>
<add key ="TCPRECEIVETIMEOUT" value="10000"/>
</appSettings>
<add key="TCPSENDTIMEOUT" value="10000"/>
<add key ="TCPRECEIVETIMEOUT" value="10000"/>
</appSettings>
No exemplo acima configurei em minha aplicação duas propriedades para armazenar os tempos limites de envio/recepção de mensagens TCP/IP
Agora vamos observar como consumir essas propriedados em nosso projeto.
tcpSocket = new TcpClient(AddressFamily.InterNetwork);
tcpSocket .SendTimeout = Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["TCPSENDTIMEOUT"]);
tcpSocket .ReceiveTimeout = Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["TCPRECEIVETIMEOUT"]);
Bom é isso! Agora já sabemos como armazenar e utilizar valores parametrizados em nossas aplicações.
Assinar:
Postagens (Atom)