AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 130931
Accepted
Hikari
Hikari
Asked: 2016-03-02 09:47:08 +0800 CST2016-03-02 09:47:08 +0800 CST 2016-03-02 09:47:08 +0800 CST

Quantas linhas uma tabela do SQL Server 2012 pode conter e quando devo particioná-la?

  • 772

Digamos que uma tabela armazene dados granulares sobre algum evento. Tem a data do evento, uma dimensão de tipo com cerca de 30 mil tipos e uma dimensão de categoria com cerca de 100 categorias, além de alguns dados numéricos.

Em média, são 15 milhões de transações por dia. Mais de 5 bilhões por ano, mais de 60G por década. Isso não é big data, mas é muito.

Quantas linhas uma tabela do SQL Server 2012 pode conter?

Obviamente, os dados mais antigos são usados ​​com menos frequência e são candidatos a serem particionados em várias tabelas no mesmo banco de dados. Mas quando esse particionamento deve começar a acontecer? 1 mesa por ano? 5 anos?

Informações adicionais coletadas dos comentários:

Considere: tenho armazenamento suficiente para armazenar 30 bilhões de registros desse evento. Se cada registro de evento exigir 1 KB, tenho 30 TB nessa tabela e armazenamento suficiente para isso (e para o log). Seu PK é bigint.

O que você acha de ter uma tabela com dados históricos e outra tabela com dados mais recentes? Ao invés de um evento transacional, a tabela possui um catálogo, clientes, por exemplo. Todos os dias o catálogo do OLTP é copiado para o DW. Assim eu teria uma tabela com os dados do histórico e outra tabela com os últimos registros.

No design que uso, o ETL alimenta a tabela de histórico, então uso row_number() para pegar o último registro de cada entidade por seu NK. É muito caro para rodar, mas desta forma mantenho entidades que existiam no passado e não estão mais no OLTP.

sql-server sql-server-2012
  • 1 1 respostas
  • 7557 Views

1 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2016-03-02T11:03:44+08:002016-03-02T11:03:44+08:00

    Quantos registros uma tabela MSSQL2012 pode conter?

    Conforme declarado na página do MSDN para especificações de capacidade máxima para SQL Server (para SQL Server 2012):

    "Linhas por tabela = Limitada pelo armazenamento disponível" (o mesmo para plataformas de 32 bits e 64 bits)

    Mas quando esse particionamento deve começar a acontecer? 1 mesa por ano? 5 anos?

    Tudo isso depende das necessidades do sistema. Não há necessidade inerente de particionar, na verdade, apenas com base na questão do desempenho. O particionamento destina-se principalmente como um meio de gerenciar mais facilmente a entrada ou saída de grandes quantidades de dados em uma tabela, o mais rápido possível e causando o mínimo de contenção possível. Se o desejo era apenas auxiliar no desempenho da consulta, talvez comece a TESTAR em torno de 1 bilhão de linhas, mas mesmo assim, se você tiver um bom modelo de dados e uma boa indexação, provavelmente nem precisará se preocupar com isso. Além disso, índices filtrados e até mesmo estatísticas filtradas provavelmente seriam suficientes para muitos casos em que as pessoas escolhem implementar o particionamento de tabelas (se a intenção for puramente relacionada ao desempenho).

    Mas se sua necessidade é remover rapidamente um grande bloco de linhas, talvez para esgotar os dados mais antigos, o particionamento da tabela ajudará, pois você pode remover os SWITCHdados "antigos". E neste nível não é uma questão de linhas, mas uma questão de quanto tempo você deseja administrar. Se você deseja trocar dados mensalmente, faça partições mensais. Se você deseja envelhecer os dados anualmente, tente partições anuais.


    ATUALIZAR

    Não sei por que não mencionei isso antes, mas você deve dar uma olhada em Partitioned Views. É quando você tem várias tabelas de esquema idêntico e uma View que faz um UNION ALL entre elas, e cada tabela tem uma CHECK CONSTRAINTaplicação de um determinado intervalo de dados dentro dessa tabela (e assim o Query Optimizer sabe de onde obter os dados). Ao fazer isso, você pode ter duas tabelas - atual e histórica - e, em seguida, ter consultas que atingem uma ou outra (se o período de tempo for conhecido com antecedência, como uma consulta que atinge apenas os 90 mais recentes dias) ou usa a Visualização se os dados puderem estar em qualquer um deles. Consulte o seguinte para obter mais informações:

    • Tabelas particionadas v. Visualizações particionadas – por que elas ainda existem?
    • Página do MSDN para CREATE VIEW (vá para a subseção Partitioned Views da seção Remarks )
    • Usando exibições particionadas

    Acredito que você possa até fazer uma combinação em que a tabela "atual" seja particionada (para que você possa alternar rapidamente os dados recebidos e excluir os dados que estão se tornando "antigos"), uma tabela não particionada para histórico e uma Visualização particionada para unir os dois. Então você só precisa de uma maneira de obter os dados da partição recém-desligada na tabela "histórica".

    Além disso, no que diz respeito ao desempenho, existem outros recursos oferecidos, dependendo de qual edição você está usando (alguns vêm apenas com Enterprise Edition). Mas você deve procurar Índices ColumnStore, Compressão de Dados e talvez algumas outras coisas.

    • 10

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve