SSIS Who Fills It
Overview
One package is writing most of this database. Which one?
SSIS Catalog Health says which table holds the space, which tells somebody the logging level is too high somewhere. This says which package, which tells them where.
Those are one click apart on the page and a fortnight apart in practice.
Where to find it
Expand a server in the tree, expand a database holding an Integration Services catalog, then SSIS → Who Fills It.
Why one package is usually the answer
A catalog that has grown to two hundred gigabytes almost never got there evenly.
It is usually one package left at Verbose after an investigation, or one looping package writing a thousand messages a run.
Dropping that one package back to Basic takes a minute, and it needs a name to be actionable at all.
This is the expensive query of the whole set
It aggregates the largest tables in the database with no useful time filter, because the accumulated total is the point: rows written last March are still taking up space.
So it has:
- its own timeout
- a sampled mode over a recent window
- a header saying which of the two it used
The Everything and Last 7 days toolbar options are those two modes.
One finding worth expecting
The list will name packages that are no longer deployed.
Messages outlive the package that wrote them. That is not a defect, it is the cleanest possible win, since those rows can go with nothing to weigh up.
Reading the grid
| Column | What it is |
|---|---|
| Package | The package that wrote the rows, including packages no longer deployed. |
| Messages | Rows in internal.event_messages. |
| Context | Rows in internal.event_message_context. Usually the largest column on the page. |
| Statistics | Rows in internal.execution_data_statistics and the component phase tables. |
| Total rows | The three added. |
| Share | That total as a share of everything counted. |
| Runs | How many executions contributed. |
| Per run | Total rows divided by runs. A high per run figure is a logging level; a high total with a low per run is simply a package that runs constantly. |
| Highest level | The highest logging level any of its runs used. |
| What to do | Turn the level down, retire the package, or nothing. |
The toolbar
| Control | Options | Default |
|---|---|---|
| Scope | Everything, Last 7 days | Everything |
| Script to turn it down | Copies the statements that set this package’s logging level back, without running them. | |
| Catalog health | Opens SSIS Catalog Health. |
Where the data comes from
| Source | What it gives |
|---|---|
internal.event_messages |
The message rows, by operation_id. |
internal.event_message_context |
The context rows. |
internal.execution_data_statistics, internal.execution_component_phases |
The statistics rows. |
internal.executions |
The package name behind each operation. |
Related reports
| Report | Why you would go there |
|---|---|
| SSIS Catalog Health | Which table holds the space, and whether the cleanup is keeping up. |
| SSIS Overrides | Where the logging level was raised, and by whom. |
| SSIS Data Flow | What the Verbose logging is buying you. |
| SSIS Catalog Inventory | Whether the package writing all this is still deployed. |
Frequently asked questions
A package on the list is not deployed any more. Then its rows can be removed with nothing to weigh up, which makes it the cheapest win on the page.
Everything mode takes a long time. It is the expensive query of the set, because the accumulated total is what matters and there is no useful time filter. Use Last 7 days when you want a quick answer about current behavior.
Per run is high but the total is small. The package logs heavily and rarely runs. Worth turning down, but it is not why SSISDB is large.
I turned the level down and nothing shrank. Turning it down stops new rows. The existing ones go when the retention window passes them, which is SSIS Catalog Health.