您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

分配问题分析

使用 sp_iqcheckdb 分析分配问题。

数据库维护了一个分配映射(也称作空闲列表),用于跟踪数据库对象正在使用的块。

DBCC 共检测三种类型的分配问题:

  • 泄漏的块 - 泄漏的块是指如下块:已根据数据库分配映射进行分配,但却未成为任何数据库对象的一部分。 DBCC 可以恢复泄漏的块。

  • 未分配的块 - 未分配的块是指如下块:未根据数据库分配映射进行分配,但正由某个数据库对象使用的块。 DBCC 可以恢复未分配的块。

  • 由多个对象共有的块 - 由多个对象共有的块是指正由多个数据库对象使用的块。所涉及的结构当中,至少有一个含有不一致的数据。DBCC 无法修复这种类型的分配问题。如果遇到这种类型的错误,请再次运行 DBCC,指定一个索引列表,直到标识了共享该块的索引为止。然后,必须将这些索引全部删除,以消除由多个对象共有的块。

    泄漏的空间输出的示例

    下面是当您运行 sp_iqcheckdb 并且有泄漏空间时所看到的输出示例。带有星号 (***) 的行中包含有关分配问题的信息。在此示例中,DBCC 报告了 16 处泄漏块。

    该示例执行的命令行是 sp_iqcheckdb 'allocation database'。

    Stat                            Value               Flags
    

    ==============================|==============================|=====

    DBCC Allocation Mode Report   | |

    ==============================|==============================|=====

    DBCC Status                |Errors Detected               |***

       DBCC Work units Dispatched |164 |

       DBCC Work units Completed  |164 |

                                  |                              |

    ==============================|==============================|=====

    Allocation Summary            | |

    ==============================|==============================|=====

       Blocks Total               |8192 |

       Blocks in Current Version  |4785 |

       Blocks in All Versions     |4785 |

       Blocks in Use              |4801 |

       % Blocks in Use            |58 |

    Blocks Leaked              |16 |***

                                  | |

    ==============================|==============================|=====

    Allocation Statistics         | |

    ==============================|==============================|=====

       ...

    1st Unowned PBN            |1994 |***

       ...

    ==============================|==============================|=====

    如果一个或多个 dbspace 处于脱机状态,请使用以下语法显示特定 dbspace 的分配问题:

    sp_iqcheckdb 'allocation dbspace '

    DBCC 分配错误

    分配问题在 DBCC 以分配模式或验证模式运行 sp_iqcheckdb 时所生成的输出中报告。如果 Allocation Summary 部分有带星号标记的值(例如“ Blocks Leaked”或“** Blocks with Multiple Owners”),则说明存在分配问题。

    DBCC 输出中与分配问题有关的消息都在下表中列出。

    DBCC 分配错误DBCC 消息描述/操作Block Count Mismatch该计数总是伴随着其它分配错误。Blocks Leaked 1st Unowned PBN发现未由任何数据库对象使用的块。使用 sp_iqcheckdb dropleaks 模式进行修复。 Blocks with Multiple Owners 1st Multiple Owner PBN正由多个数据库对象使用的块。删除报告为不一致的对象。Unallocated Blocks in Use 1st Unallocated PBN正由数据库对象使用但未标记为“正在使用”的块。使用 sp_iqcheckdb dropleaks 模式进行修复。 

    如果 Allocation Summary 行未指出任何问题,但 Index Summary 部分为 "Inconsistent Index Count" 报告了一个值,则说明存在一个或多个不一致的索引。