ORM Profiler analysis features overview
ORM Profiler contains a deep, fine grained analysis system to find performance problems and other data-access related problems quickly. Below
you'll find an overview of the various alerts the analysis functionality provided by ORM Profiler can detect. Many of the alerts are configurable
with thresholds to meet your application's specific nature. You can enable / disable any of these alerts to focus on specific problems or avoid
receiving alerts which are not of interest to you in that particular situation.
To learn more about the general features of the ORM Profiler, please visit the General Features overview for
- Undisposed Connection alert occurs when a connection is discovered which
hasn't been properly disposed. This alert can quickly show possible memory problems with respect to orphaned connections
- Select N+1 alert occurs when per result row of a parent query (e.g. a query for a set of
Customers) a query is executed for a related row or rows (e.g. a query for the Customer's Order rows). This alert shows where
your code can be optimized to use prefetch paths / include / spans or other means to fetch the graph of resultsets instead of
many separate queries.
- Select N+1 Across Connections alert. This alert is similar to Select N+1, however this time the analyzer also takes into account
queries which are executed over a separate connection.
- Select Outside Transaction alert occurs when a thread T has an open transaction and
executes a Select statement over another connection, which could lead to a dead lock on some databases like SQL Server.
- Large Resultset alert occurs if a query returns more rows than the configured threshold. This
alert shows you where a lot of data is read which is potentially not used.
- Slow SQL Statement alert occurs when a SQL query takes more time than the configured threshold. The
time measured is the execution time in the RDBMS system. This alert shows you which SQL queries are slow and should be optimized, either
by using different SQL statements or by adding indices and other optimization techniques in the RDBMS system itself.
- Slow Data Read alert occurs when the read action of a resultset returned by a query
takes longer than the configured threshold. This alert shows you which queries return massive amounts of data, e.g. in BLOB/Image/ntext
fields which might not be used by your code at that moment.
- Parameter Size Fluctuation alert occurs when the same SQL query is executed with
parameter objects which have different sizes set than the previous execution of the same SQL query. When a parameter size fluctuates
in multiple occurrences of the same query, some RDBMS-es create different execution plans for the SQL query, resulting in potentially
slower SQL query execution and execution plan caching degration.
- Multi-threaded Connection Usage alert occurs when a connection object is used by
multiple threads. Multi-threaded connection usage could lead to unexpected results at runtime, including exceptions and application
- Updates in Loop alert occurs when multiple Update queries originate from the same origin. This
alert can be used to detect the situation where multiple entities are read into memory, updated in memory and then persisted again,
which could be replaced with a single one or a couple of Update statements executed directly onto the database.
- Deletes in Loop alert. Similar to Updates in Loop, except this alert focuses on Delete queries.
- Selects In Loop alert. Similar to Updates in Loop, except this alert focuses on Select queries. This alert is different from
the Select N+1 alert, as there doesn't have to be a parent query for this alert.
- Too Many SQL Statements Per Connection alert occurs when the amount of
executed SQL statements over an open connection is more than the configured threshold. This alert could help find excessive
database activity in areas where little activity was expected.
- Connection Kept Open Longer Than Needed alert occurs when the period
between connection Open and connection Close without any activity is longer than the configured threshold. This alert could help find
situations where a database connection is kept open unnecessary, which degrades the multi-user capabilities of the used RDBMS.
- DML Without Transaction alert occurs when the same thread executes DML statements (Insert, Update,
Delete queries) over the same or multiple connections without a transaction. This alert could be used to detect queries which were
expected to be executed inside a transaction but weren't.
- Massive SQL Statement alert occurs when a SQL
statement is executed which is longer (in characters) than a set
threshold. This alert is mainly meant to find large statements
which might have been created using slow LINQ statements so the
user should look into optimizing them.