No PostgreSQL e SQL Server, o tamanho de página padrão é 8 KB, no MySQL é 16 KB e no IBM DB2 e Oracle é apenas 4 KB.
Por que esses tamanhos de página são tão pequenos?
Existe um motivo histórico ou de uso de memória?
No PostgreSQL e SQL Server, o tamanho de página padrão é 8 KB, no MySQL é 16 KB e no IBM DB2 e Oracle é apenas 4 KB.
Por que esses tamanhos de página são tão pequenos?
Existe um motivo histórico ou de uso de memória?
Devo usar varchar(255)
ou varchar(256)
ao projetar tabelas? Ouvi dizer que um byte é usado para o comprimento da coluna ou para armazenar metadados.
Isso importa mais neste momento?
Eu vi alguns posts na internet, porém eles se aplicam a Oracle e MySQL.
Temos o Microsoft SQL Server 2016 Enterprise Edition, como se aplica a este ambiente?
Agora diga, por exemplo, e se eu dissesse aos meus clientes para manter, por exemplo, uma descrição de texto com 255 caracteres em vez de 256, há alguma diferença? O que li "Com comprimento máximo de 255 caracteres, o SGBD pode optar por usar um único byte para indicar o comprimento dos dados no campo. Se o limite fosse 256 ou maior, seriam necessários dois bytes." Isso é verdade?
Estou tentando restaurar um despejo sem ter as funções apropriadas no banco de dados de recebimento.
Como mencionado aqui , mas também aqui , você precisa ter o --no-owner
como opção, em pg_dump
ou em pg_restore
ambos.
Eu usei a seguinte linha de comando para criar meu dump:
"C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe" --no-owner -Ft --dbname=postgresql://avo******:AV0******[email protected]:5432/BI_DB > K:\BI\backup\sort\bck_%timestamp%.tar
A linha de restauração é a seguinte:
"C:\Program Files\PostgreSQL\9.3\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "BI_TEST2" --no-password --no-owner --role=postgres --exit-on-error --verbose "D:\D\avo\backup\bck_04042017_1410.tar"
Como você pode ver, ambos têm a --no-owner
opção, mas eventualmente, tenho o erro abaixo:
O que me incomoda terrivelmente é o log abaixo:
pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») :
pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 2633 ; 0 0 ACL adm avo******
pg_restore: [programme d'archivage (db)] could not execute query: ERREUR: role « avo****** » does not exist
Por que ele diz que precisa de uma função, mesmo que --no-owner
tenha sido especificado?
Perdi alguma coisa?
Estou rodando no Postgres 9.3
Na documentação do PostgreSQL, diz-se que os tipos de dados inteiros podem ser armazenados em espaços de dois, quatro ou oito bytes. Uma das colunas de uma tabela em meu banco de dados contém um valor inteiro de um byte e desejo que seja armazenado em um tipo de dados de um byte.
Atualmente em execução no SQL Server 2008 R2
Estou tentando aumentar o desempenho de uma instrução UPDATE. Eu noto uma operação Eager Spool no showplan aparecendo. Minha compreensão das operações de spool é bastante básica - elas criam armazenamento temporário para a tabela durante a atualização.
Também sei que, embora estejam impedindo tempos de execução muito piores, os spools ansiosos geralmente são indicativos de problemas subjacentes com a estrutura da tabela e/ou instruções de consulta.
Minha pergunta é bem simples: quando você vê um Eager Spool em seu plano de consulta, quais problemas você procura resolver primeiro?
Estarei analisando cada parte do nosso sistema para aumentar o desempenho - estou apenas procurando orientação sobre por onde devo começar.
Como posso copiar meu public
esquema no mesmo banco de dados com estrutura de tabela completa, dados, funções, fk, pk e etc.
Minha versão do Postgres é 8.4
PS eu preciso copiar esquema NÃO banco de dados
Qual é a melhor maneira de adicionar colunas a grandes tabelas de produção no SQL Server 2008 R2? De acordo com os livros online da Microsoft:
As alterações especificadas em ALTER TABLE são implementadas imediatamente. Se as alterações exigirem modificações nas linhas da tabela, ALTER TABLE atualizará as linhas. ALTER TABLE adquire um bloqueio de modificação de esquema na tabela para garantir que nenhuma outra conexão faça referência até mesmo aos metadados da tabela durante a alteração, exceto operações de índice online que exigem um bloqueio SCH-M muito curto no final.
(http://msdn.microsoft.com/en-us/library/ms190273.aspx)
Em uma tabela grande com milhões de linhas, isso pode demorar um pouco. Fazer uma interrupção é a única opção? Qual é a melhor maneira de lidar com esse tipo de situação?
Preciso converter um valor de Double Precision para Bigint com PostgreSQL. Como eu posso fazer isso?
Eu tentei com, to_bigint(myvalue)
mas essa função não existia.
Quero saber por que devo usar um int como chave primária de uma tabela de pesquisa, em vez de apenas usar o valor de pesquisa como chave primária (que na maioria dos casos seria uma string).
Entendo que usar um nvarchar (50) em vez de um int usaria muito mais espaço se estivesse vinculado a uma tabela com muitos registros.
Por outro lado, usar o valor de pesquisa diretamente basicamente nos pouparia de fazer uma junção. Posso imaginar que isso seria uma grande economia se a junção fosse sempre necessária (estamos trabalhando em um aplicativo da web, então isso conta bastante).
Quais são as vantagens de usar uma chave primária int (especificamente para uma tabela de pesquisa), além de ser "a coisa padrão a fazer"?
Eu sei que um INSERT em uma tabela SQL pode ser lento por vários motivos:
Como posso saber qual é o responsável no meu caso específico? Como posso medir o impacto das divisões de página em relação às atualizações de índice não clusterizadas em relação a todo o resto?
Eu tenho um proc armazenado que insere cerca de 10.000 linhas por vez (de uma tabela temporária), o que leva cerca de 90 segundos por 10 mil linhas. Isso é inaceitavelmente lento, pois faz com que outros spids expirem.
Examinei o plano de execução e vejo a tarefa INSERT CLUSTERED INDEX e todas as INDEX SEEKS das pesquisas FK, mas ainda não me diz com certeza por que demora tanto. Nenhum gatilho, mas a tabela tem um punhado de FKeys (que parecem estar indexadas corretamente).
Este é um banco de dados SQL 2000.