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 / 57140
Accepted
abianari
abianari
Asked: 2014-01-21 06:10:21 +0800 CST2014-01-21 06:10:21 +0800 CST 2014-01-21 06:10:21 +0800 CST

fragmentação para crescimento de índice não cluster muito rápido para 30

  • 772

Eu tenho uma tabela com cerca de 7 milhões de registros. A fragmentação do índice foi de cerca de 90 .

Eu tento reconstruir o índice para todos os índices. e funciona bem, mas após a fragmentação do trabalho noturno para um none cluster indexcrescimento para 30 . todas as noites eu trunco ​​esta tabela e insiro um novo registro nela e atualizo alguma coluna (índice não clusterizado (não a coluna que eu mencionei)). não sei por que a fragmentação para esse índice( IX_Customer_Code) cresce rápido. a carga de trabalho na tabela:

1- todas as noites truncadas. 2-inserir cerca de 7.000.000 registros. 3- atualizar Customer_Key(em inserir fica nulo).

Eu tenho problemas comIX_CustomerCode

name                index_type_desc          page_count
IX_CustomerCode     NONCLUSTERED INDEX             17,323 
IX_Customer_Key     NONCLUSTERED INDEX             15,608 
Ix_Date             NONCLUSTERED INDEX             15,561 
PK_MDT_Customer_Order_Debit_Date_Infos_Tmp  CLUSTERED INDEX  436,675 

Estrutura da mesa:

    CREATE TABLE [dbo].[MDT_Customer_Order_Debit_Date_Infos](
        [OrderDebit_SeqID] [bigint] IDENTITY(1,1) NOT NULL,
        [Date_ID] [int] NOT NULL,
        [Dist_Zone_Code] [int] NULL,
        [Branch_Code] [int] NULL,
        [Dist_Area_Code] [int] NULL,
        [Dist_Path_Code] [int] NULL,
        [Sale_Zone_Code] [int] NULL,
        [Region_Code] [int] NULL,
        [Office_Code] [int] NULL,
        [Area_Code] [int] NULL,
        [Path_Code] [int] NULL,
        [Visitor_Code] [int] NULL,
        [Customer_Code] [int] NULL,
        [Customer_Master_Code] [varchar](12) NULL,
        [Order_Office_Code] [int] NOT NULL,
        [Order_No] [varchar](10) NOT NULL,
        [Factor_No] [varchar](10) NULL,
        [Order_Status] [tinyint] NULL,
        [Sub_Order_Type] [int] NULL,
        [Payment_Type] [tinyint] NULL,
        [Order_Type] [tinyint] NULL,
        [Return_Reason_Code] [int] NULL,
        [Order_Price] [numeric](18, 0) NULL,
        [PromotionActual_Price] [numeric](18, 0) NULL,
        [Order_DutyPlusTax] [numeric](18, 0) NULL,
        [ReturnPromotionActual_Price] [numeric](18, 0) NULL,
        [Return_Discount] [numeric](18, 0) NULL,
        [PromotionDiscount_Price] [numeric](18, 0) NULL,
        [Discount] [numeric](18, 0) NULL,
        [Calc_Discount] [numeric](18, 0) NULL,
        [ReturnOrder_Price] [numeric](18, 0) NULL,
        [Return_DutyPlusTax] [numeric](18, 0) NULL,
        [Cash_AvgAge] [numeric](18, 2) NULL,
        [Check_AvgAge] [numeric](18, 2) NULL,
        [Indirect_AvgAge] [numeric](18, 2) NULL,
        [Money_Amount] [numeric](18, 0) NULL,
        [Indirect_Amount] [numeric](18, 0) NULL,
        [Check_Amount] [numeric](18, 0) NULL,
        [ReturnCheck_Amount] [numeric](18, 0) NULL,
        [RetChqSettle_Cash] [numeric](18, 0) NULL,
        [RetChqSettle_Check] [numeric](18, 0) NULL,
        [RemainCheck_Debit] [numeric](18, 0) NULL,
        [Order_Payable] [numeric](18, 0) NULL,
        [Order_Debit] [numeric](18, 0) NULL,
        [OrderRemain_ReturnCheck] [numeric](18, 0) NULL,
        [RealRemain_Debit] [numeric](18, 0) NULL,
        [RealRemain_Check] [numeric](18, 0) NULL,
        [Debit_Age] [numeric](18, 2) NULL,
        [Payment_Age] [numeric](18, 2) NULL,
        [Factor_Date] [int] NULL,
        [Order_Date] [int] NULL,
        [Visit_Date] [int] NULL,
        [Give_Date] [int] NULL,
        [Office_Key] [int] NULL,
        [Customer_Key] [int] NULL,
        [During_Check_Amount] [numeric](18, 0) NULL,
        [Collected_Check_Amount] [numeric](18, 0) NULL,
        [Dist_Branch_Key] [int] NULL,
        [AllCheck_AvgAge] [numeric](18, 2) NULL,
        [Cheque_Age] [int] NULL,
        [Sale_Remain_Debit] [numeric](18, 0) NULL,
        [Dist_Remain_Debit] [numeric](18, 0) NULL,
        [HandMoney_Amount] [numeric](18, 0) NULL,
        [AllCheck_Amount] [numeric](18, 0) NULL,
        [Indirect_Discount_Amount] [numeric](18, 0) NULL,
        [PosMoney_Amount] [numeric](18, 0) NULL,
        [Portfolio_Code] [int] NULL,
        [Portfolio_Set_Code] [int] NULL,
        [Portfolio_Type] [tinyint] NULL,
        [Company_id] [smallint] NULL,
     CONSTRAINT [PK_MDT_Customer_Order_Debit_Date_Infos_Tmp] PRIMARY KEY CLUSTERED 
    (
        [OrderDebit_SeqID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
    ) ON [PRIMARY]


CREATE NONCLUSTERED INDEX [IX_Customer_Key] ON [dbo].[MDT_Customer_Order_Debit_Date_Infos]
(
    [Customer_Key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
GO



/****** Object:  Index [IX_CustomerCode]    Script Date: 1/20/2014 6:02:52 PM ******/
CREATE NONCLUSTERED INDEX [IX_CustomerCode] ON [dbo].[MDT_Customer_Order_Debit_Date_Infos]
(
    [Customer_Code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


/****** Object:  Index [Ix_Date]    Script Date: 1/20/2014 6:02:59 PM ******/
CREATE NONCLUSTERED INDEX [Ix_Date] ON [dbo].[MDT_Customer_Order_Debit_Date_Infos]
(
    [Date_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


/****** Object:  Index [PK_MDT_Customer_Order_Debit_Date_Infos_Tmp]    Script Date: 1/20/2014 6:03:07 PM ******/
ALTER TABLE [dbo].[MDT_Customer_Order_Debit_Date_Infos] ADD  CONSTRAINT [PK_MDT_Customer_Order_Debit_Date_Infos_Tmp] PRIMARY KEY CLUSTERED 
(
    [OrderDebit_SeqID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
GO
index sql-server-2012
  • 2 2 respostas
  • 1239 Views

2 respostas

  • Voted
  1. Best Answer
    Jon Seigel
    2014-01-21T06:23:44+08:002014-01-21T06:23:44+08:00

    O índice não clusterizado provavelmente tem uma ordem diferente da tabela base e, portanto, as inserções/atualizações nessa coluna fragmentarão o índice. FILLFACTOR(e PAD_INDEX) as configurações só se aplicam quando o índice é reconstruído, não durante as operações normais.

    O que eu sugeriria é descartar todos os índices não clusterizados na tabela antes de carregar os novos dados e, em seguida, recriar os índices depois de terminar de mexer nos dados que os afetariam.

    Se a fragmentação é ou não um problema no seu caso, é discutível. Embora a tabela seja bastante ampla, eliminar a fragmentação do índice não clusterizado é uma preocupação apenas se você precisar varrer esse índice do disco, o que não acontecerá se o índice já estiver na memória. O índice não clusterizado é muito pequeno em comparação com a tabela. Você precisaria descobrir em seu sistema se há uma diferença mensurável no desempenho da consulta antes/depois de reconstruir o índice, mas como mencionei acima, você pode estar mais à frente para descartar/recriar o índice de qualquer maneira, o que eliminaria a fragmentação e também permitem que você use 100% FILLFACTOR.

    • 3
  2. JaMeEL
    2014-01-21T06:30:58+08:002014-01-21T06:30:58+08:00

    Você só precisa se preocupar com a fragmentação quando todos esses fatores forem verdadeiros:

    1. O índice é grande o suficiente, mas a leitura aleatória das páginas (extensões) é muito lenta.
    2. O índice será verificado, as páginas de índice (extensões) serão fisicamente lidas do disco (ou seja, elas ainda não estão no buffer pool)
    3. O subsistema de armazenamento é ruim em lidar com leituras aleatórias (ou seja, baseado em fuso e os bytes não saem do cache).
    • 3

relate perguntas

  • Como criar várias entradas no índice com base nos campos de uma linha?

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

  • Quanto "Padding" coloco em meus índices?

  • O que significa "índice" em RDBMSs? [fechado]

  • Como criar um índice condicional no MySQL?

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