Skip to content

DbContextPool not decrementing active_dbcontexts metrics #38306

@gijs-hendrikx

Description

@gijs-hendrikx

Bug description

I want to use the DbContext pool. Because I have a few places where it's up to the developer to properly dispose the DbContext I want to monitor pool usage and context disposal.

There are no metrics for the pool (e.g. rented out db contexts), so I tried monitoring the 'microsoft.entityframeworkcore.active_dbcontexts' metric. However I notice that this metric is not correct when used in combination with a pool.

I know that the metric includes the idle contexts in the pool as discussed in #35855 , but whenever the pool is exhausted and falls back to creating new contexts, those contexts are also not decremented from the metric after disposal, so you get an ever-incrementing metric. I can monitor the internal pools _count field to check if the pool is not getting saturated, but that also doesn't give me the full picture.

E.g. if you have a pool limit of 50 and rent 75 db contexts at once, of which you return 60, the internal pool _count will show that you have 50 contexts available and the active_dbcontexts metric will show 75 contexts. There is no way to deduce that there are in fact 15 active/lingering contexts.

A project to reproduce and show this error can be found here.

Your code

https://github.com/gijs-hendrikx/DbContextPool_Debugger

Stack traces


Verbose output


EF Core version

9.0.5

Database provider

No response

Target framework

.NET 10.0

Operating system

Windows 11

IDE

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions