Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sp_BlitzIndex: Stats info running from wrong database #1947

Closed
mabrahamsen opened this Issue Feb 7, 2019 · 2 comments

Comments

Projects
None yet
2 participants
@mabrahamsen
Copy link

mabrahamsen commented Feb 7, 2019

Version of the script
sp_BlitzIndex(TM) v7.2 - January 28, 2019: Database [XYZ] as of 2019-02-07 13:15

What is the current behavior?
When you execute a BlitzIndex specifying a database name, and a index name (to get the stats view mode), it will pull stats / histogram from an index in the current database (aka the active database in your SSMS query view) - not the database specified.

If the current behavior is a bug, please provide the steps to reproduce.
Run BlitzIndex for a table, but make sure your current active database is not the same as the database specified.

EXEC sp_BlitzIndex @DatabaseName = 'XYZ', @SchemaName = 'dbo', @TableName = 'XYZ';

It will pull stats / histogram from an index, in the current database - assuming it finds it. I guess it will load by some identifiers that may or may not be in the active database as well. It will find a match in some active databases, but not in others.

What is the expected behavior?
Load stats from the specified database and index, not the current active database.

Which versions of SQL Server and which OS are affected by this issue? Did this work in previous versions of our procedures?

Only tested on SQL 2017. I believe this is a new feature in a very recent update.

@mabrahamsen

This comment has been minimized.

Copy link
Author

mabrahamsen commented Feb 7, 2019

Seems there is no way to set the database for:

CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) AS props
CROSS APPLY sys.dm_db_stats_histogram(s.[object_id], s.stats_id) AS hist

So they would need to be executed in the correct database context. The system tables could be easily fixed by specifying database name. I couldn't get that to work correctly with the functions.

I am not sure what infrastructure sp_blitzindex would have to execute a SQL string in a specific database context - I couldn't find any by doing a very quick code scan.

BrentOzar added a commit that referenced this issue Feb 9, 2019

#1947 sp_BlitzIndex stats for current db
Can only get stats if you're in the database you're analyzing. Closes #1947.

BrentOzar added a commit that referenced this issue Feb 9, 2019

#1947 sp_BlitzIndex stats for current db (#1955)
Can only get stats if you're in the database you're analyzing. Closes #1947.
@BrentOzar

This comment has been minimized.

Copy link
Member

BrentOzar commented Feb 9, 2019

Great catch, and thanks for the work reproducing it!

Yeah, looks like a bug in sys.dm_db_stats_histogram and sys.dm_db_stats_properties.

To work around it, I did two things:

  1. Put a check in sp_BlitzIndex to only query statistics if we're checking the same database we're in (just to prevent the false alarm of stats), and
  2. Filed a bug in SQL Server: https://feedback.azure.com/forums/908035-sql-server/suggestions/36803269-sys-dm-db-stats-histogram-and-sys-dm-db-stats-prop

@BrentOzar BrentOzar self-assigned this Feb 9, 2019

@BrentOzar BrentOzar added this to the 2019-02 milestone Feb 9, 2019

BrentOzar added a commit that referenced this issue Feb 19, 2019

2019_02 Release (#1977)
* Updating readme.md for sp_DatabaseRestore

Documenting @ExistingDBAction for https://dba.stackexchange.com/questions/226145/sp-databaserestore-msg-50000.

* 1900 sp_BlitzIndex add histograms

When @TableName is specified and sys.dm_db_stats_histogram is available. Closes #1900.

* #1903 sp_Blitz SQLServerCheckup

Adding filter for that app name. Closes #1903.

* #1905 sp_BlitzIndex remove BOU link

Nothing against BOU, just don't need it in that particular place. Closes #1905.

* #1908 Update copyright dates

Ah, the glamour. Closes #1908.

* Issue #1904 Change RAISERROR 'severity' for that should trigger throw and error.

* Issue #1910 Add SQL Server version check before choosing 'memory grant' as the @BlitzCacheSortOrder.

* Issue #1910 Add temp table creation.

* #1914 sp_BlitzIndex partition error severity

Dropping severity level from 16 to 0 since we're logging it in the result set anyway. Closes #1914.

* Issue 1894 Moved RESTORE HEADERONLY up

* LF line endings

* added some extra checks + corrected some nesting

* rebase and line endings

* Web site commit

Does this fix line endings?

* #1916 sp_Blitz ignore backup on TempDB drive

Closes #1916.

* Auto line endings

Dealing with sp_DatabaseRestore's line endings.

* 1919 sp_Blitz ignoring a few checks for Managed Instances (#1920)

* 1919 sp_Blitz ignoring a few checks for Managed Instances

Working on #1919.

* #1919 sp_Blitz excluding restored databases

When checking backup history. Working on #1919.

* #1919 sp_Blitz ignore some checks on Mgd Instances

Changing RCSI wording on Azure SQL DB. Working on #1919.

* #1921 Sp_BlitzIndex Add Drop and Create Columns to Output (#1923)

Joined output query to #IndexCreateTsql to retrieve the CreateTsql already generated earlier in the script.  Created Drop TSQL based off evaluating what type of index was present.

* #1921 sp_BlitzIndex adding drops (#1924)

Moving drop and create TSQL to the end of mode 2's results. Closes #1921.

* #1925 sp_Blitz AWS RDS detection (#1926)

Don't just rely on EC2 VM name to detect RDS. Also adds a new result noting that checks were skipped. Closes #1925.

* #1927 sp_BlitzIndex skip rdsadmin db (#1928)

GetAllDatabases = 1 fails when it hits rdsadmin because they're referring to the resource db. Closes #1927.

* 2019_01 Release (#1931)

Prep work for the release - changing version numbers, building build scripts.

* #1933 sp_BlitzIndez Azure SQL DB (#1934)

Check for DaysUptime is null. Closes #1933.

* 1936 Deprecate Power BI Dashboard (#1937)

Closes #1936.

* sp_BlitzFirst - Decimals - Fixes #1940 (#1941)

* batch requests & waits/core/sec are now decimals

* also updated final data set for consistency

* 1950 sp blitz lock azure sql db hyperscale (#1951)

* #1950 sp_BlitzLock Azure SQL DB Hyperscale

Fixes #1950.

* #1950 sp_BlitzLock Azure SQL DB Hyperscale

Oops, forgot my semicolon. Fixes #1950.

* #1947 sp_BlitzIndex stats for current db (#1955)

Can only get stats if you're in the database you're analyzing. Closes #1947.

* #1952 sp_BlitzIndex Fix INSERT query column order (#1954)

* remove table name from create index script (#1942)

* Add Version Checking  for all SP (#1949)

* Update sp_BlitzCache.sql

DECLARE @BlitzCacheVersion     VARCHAR(30);
DECLARE @BlitzCacheVersionDate DATETIME2;
EXEC dbo.sp_BlitzCache @VersionCheckMode = 1, @Version = @BlitzCacheVersion OUTPUT, @VersionDate = @BlitzCacheVersionDate OUTPUT ;
SELECT @BlitzCacheVersion as BlitzCacheVersion , @BlitzCacheVersionDate as BlitzCacheVersionDate

* Update sp_BlitzFirst.sql

* Update sp_BlitzIndex.sql

* Update sp_BlitzLock.sql

* Update sp_BlitzQueryStore.sql

* Update sp_BlitzWho.sql

* Update sp_DatabaseRestore.sql

* Update sp_BlitzInMemoryOLTP.sql

* Update sp_foreachdb.sql

* Update sp_ineachdb.sql

* Update sp_BlitzBackups.sql

* Update sp_Blitz.sql

* Update sp_AllNightLog_Setup.sql

* Update sp_AllNightLog.sql

* Update sp_BlitzInMemoryOLTP.sql

* Update sp_BlitzLock.sql

* sp_ineachdb version check

Tweaking #1948 so it works. Closes #1948.

* Update sp_BlitzCache.sql (#1953)

Complete the join between #missing_index_detail and ##bou_BlitzCacheProcs as otherwise on servers running jobs with many steps, each missing indices will cause #missing_index_pretty to grow exponentially, causing sp_BlitzCache to run for hours.

* Fixes #1943 - sp_Blitz check if SSIS/SSRS/SSAS are running (#1957)

* Update sp_Blitz.sql

* Update sp_Blitz.sql

* Update sp_Blitz Checks by Priority.md

* Update sp_Blitz Checks by Priority.md

* Update sp_Blitz Checks by Priority.md

* altered search strings

because *of course* there's white space. shouldn't hurt too badly because there aren't many services running on sql boxes (hopefully)

* #1943 adding URL (#1960)

For new SSAS/IS/RS check. Closes #1943.

* sp_BlitzCache additional plural checks for @SortOrder (#1963)

* additional plural checks

added in plural checks, also raised error to 16 when invalid sort order is chosen.

* removed unnecessary checks

* minor typo (#1965)

* #1967 sp_Blitz updating supported versions (#1969)

SQL 2012 pre-SP4 is out of support. Closes #1967.

* #1935 sp_BlitzCache Azure compatibility (#1972)

Azure SQL DB compatibility and removing bou from global temp table names. Closes #1935.

* #1973 sp_BlitzIndex truncation error (#1974)

Fixes #1973.

* #1971 add POOL_LOG_RATE_GOVERNOR as poison (#1975)

Closes #1971.

* #1966 fix sp_Blitz check IDs (#1976)

203 and 224 were swapped in the documentation. Closes #1966.

* 20190219 bumping version numbers

To prep for imminent release...

* 20190219 release

Updating install-all-scripts with new versions.

BrentOzar added a commit that referenced this issue Feb 19, 2019

2019_02 release, take 2 (#1979)
* Updating readme.md for sp_DatabaseRestore

Documenting @ExistingDBAction for https://dba.stackexchange.com/questions/226145/sp-databaserestore-msg-50000.

* 1900 sp_BlitzIndex add histograms

When @TableName is specified and sys.dm_db_stats_histogram is available. Closes #1900.

* #1903 sp_Blitz SQLServerCheckup

Adding filter for that app name. Closes #1903.

* #1905 sp_BlitzIndex remove BOU link

Nothing against BOU, just don't need it in that particular place. Closes #1905.

* #1908 Update copyright dates

Ah, the glamour. Closes #1908.

* Issue #1904 Change RAISERROR 'severity' for that should trigger throw and error.

* Issue #1910 Add SQL Server version check before choosing 'memory grant' as the @BlitzCacheSortOrder.

* Issue #1910 Add temp table creation.

* #1914 sp_BlitzIndex partition error severity

Dropping severity level from 16 to 0 since we're logging it in the result set anyway. Closes #1914.

* Issue 1894 Moved RESTORE HEADERONLY up

* LF line endings

* added some extra checks + corrected some nesting

* rebase and line endings

* Web site commit

Does this fix line endings?

* #1916 sp_Blitz ignore backup on TempDB drive

Closes #1916.

* Auto line endings

Dealing with sp_DatabaseRestore's line endings.

* 1919 sp_Blitz ignoring a few checks for Managed Instances (#1920)

* 1919 sp_Blitz ignoring a few checks for Managed Instances

Working on #1919.

* #1919 sp_Blitz excluding restored databases

When checking backup history. Working on #1919.

* #1919 sp_Blitz ignore some checks on Mgd Instances

Changing RCSI wording on Azure SQL DB. Working on #1919.

* #1921 Sp_BlitzIndex Add Drop and Create Columns to Output (#1923)

Joined output query to #IndexCreateTsql to retrieve the CreateTsql already generated earlier in the script.  Created Drop TSQL based off evaluating what type of index was present.

* #1921 sp_BlitzIndex adding drops (#1924)

Moving drop and create TSQL to the end of mode 2's results. Closes #1921.

* #1925 sp_Blitz AWS RDS detection (#1926)

Don't just rely on EC2 VM name to detect RDS. Also adds a new result noting that checks were skipped. Closes #1925.

* #1927 sp_BlitzIndex skip rdsadmin db (#1928)

GetAllDatabases = 1 fails when it hits rdsadmin because they're referring to the resource db. Closes #1927.

* 2019_01 Release (#1931)

Prep work for the release - changing version numbers, building build scripts.

* #1933 sp_BlitzIndez Azure SQL DB (#1934)

Check for DaysUptime is null. Closes #1933.

* 1936 Deprecate Power BI Dashboard (#1937)

Closes #1936.

* sp_BlitzFirst - Decimals - Fixes #1940 (#1941)

* batch requests & waits/core/sec are now decimals

* also updated final data set for consistency

* 1950 sp blitz lock azure sql db hyperscale (#1951)

* #1950 sp_BlitzLock Azure SQL DB Hyperscale

Fixes #1950.

* #1950 sp_BlitzLock Azure SQL DB Hyperscale

Oops, forgot my semicolon. Fixes #1950.

* #1947 sp_BlitzIndex stats for current db (#1955)

Can only get stats if you're in the database you're analyzing. Closes #1947.

* #1952 sp_BlitzIndex Fix INSERT query column order (#1954)

* remove table name from create index script (#1942)

* Add Version Checking  for all SP (#1949)

* Update sp_BlitzCache.sql

DECLARE @BlitzCacheVersion     VARCHAR(30);
DECLARE @BlitzCacheVersionDate DATETIME2;
EXEC dbo.sp_BlitzCache @VersionCheckMode = 1, @Version = @BlitzCacheVersion OUTPUT, @VersionDate = @BlitzCacheVersionDate OUTPUT ;
SELECT @BlitzCacheVersion as BlitzCacheVersion , @BlitzCacheVersionDate as BlitzCacheVersionDate

* Update sp_BlitzFirst.sql

* Update sp_BlitzIndex.sql

* Update sp_BlitzLock.sql

* Update sp_BlitzQueryStore.sql

* Update sp_BlitzWho.sql

* Update sp_DatabaseRestore.sql

* Update sp_BlitzInMemoryOLTP.sql

* Update sp_foreachdb.sql

* Update sp_ineachdb.sql

* Update sp_BlitzBackups.sql

* Update sp_Blitz.sql

* Update sp_AllNightLog_Setup.sql

* Update sp_AllNightLog.sql

* Update sp_BlitzInMemoryOLTP.sql

* Update sp_BlitzLock.sql

* sp_ineachdb version check

Tweaking #1948 so it works. Closes #1948.

* Update sp_BlitzCache.sql (#1953)

Complete the join between #missing_index_detail and ##bou_BlitzCacheProcs as otherwise on servers running jobs with many steps, each missing indices will cause #missing_index_pretty to grow exponentially, causing sp_BlitzCache to run for hours.

* Fixes #1943 - sp_Blitz check if SSIS/SSRS/SSAS are running (#1957)

* Update sp_Blitz.sql

* Update sp_Blitz.sql

* Update sp_Blitz Checks by Priority.md

* Update sp_Blitz Checks by Priority.md

* Update sp_Blitz Checks by Priority.md

* altered search strings

because *of course* there's white space. shouldn't hurt too badly because there aren't many services running on sql boxes (hopefully)

* #1943 adding URL (#1960)

For new SSAS/IS/RS check. Closes #1943.

* sp_BlitzCache additional plural checks for @SortOrder (#1963)

* additional plural checks

added in plural checks, also raised error to 16 when invalid sort order is chosen.

* removed unnecessary checks

* minor typo (#1965)

* #1967 sp_Blitz updating supported versions (#1969)

SQL 2012 pre-SP4 is out of support. Closes #1967.

* #1935 sp_BlitzCache Azure compatibility (#1972)

Azure SQL DB compatibility and removing bou from global temp table names. Closes #1935.

* #1973 sp_BlitzIndex truncation error (#1974)

Fixes #1973.

* #1971 add POOL_LOG_RATE_GOVERNOR as poison (#1975)

Closes #1971.

* #1966 fix sp_Blitz check IDs (#1976)

203 and 224 were swapped in the documentation. Closes #1966.

* 20190219 bumping version numbers

To prep for imminent release...

* 20190219 release

Updating install-all-scripts with new versions.

* 2019_02 Release

Bumping version numbers & dates.

* Merge conflicts, good times

* Merge conflicts, whee

BrentOzar added a commit that referenced this issue Feb 19, 2019

2019_02 Release (#1980)
* Updating readme.md for sp_DatabaseRestore

Documenting @ExistingDBAction for https://dba.stackexchange.com/questions/226145/sp-databaserestore-msg-50000.

* 1900 sp_BlitzIndex add histograms

When @TableName is specified and sys.dm_db_stats_histogram is available. Closes #1900.

* #1903 sp_Blitz SQLServerCheckup

Adding filter for that app name. Closes #1903.

* #1905 sp_BlitzIndex remove BOU link

Nothing against BOU, just don't need it in that particular place. Closes #1905.

* #1908 Update copyright dates

Ah, the glamour. Closes #1908.

* Issue #1904 Change RAISERROR 'severity' for that should trigger throw and error.

* Issue #1910 Add SQL Server version check before choosing 'memory grant' as the @BlitzCacheSortOrder.

* Issue #1910 Add temp table creation.

* #1914 sp_BlitzIndex partition error severity

Dropping severity level from 16 to 0 since we're logging it in the result set anyway. Closes #1914.

* Issue 1894 Moved RESTORE HEADERONLY up

* LF line endings

* added some extra checks + corrected some nesting

* rebase and line endings

* Web site commit

Does this fix line endings?

* #1916 sp_Blitz ignore backup on TempDB drive

Closes #1916.

* Auto line endings

Dealing with sp_DatabaseRestore's line endings.

* 1919 sp_Blitz ignoring a few checks for Managed Instances (#1920)

* 1919 sp_Blitz ignoring a few checks for Managed Instances

Working on #1919.

* #1919 sp_Blitz excluding restored databases

When checking backup history. Working on #1919.

* #1919 sp_Blitz ignore some checks on Mgd Instances

Changing RCSI wording on Azure SQL DB. Working on #1919.

* #1921 Sp_BlitzIndex Add Drop and Create Columns to Output (#1923)

Joined output query to #IndexCreateTsql to retrieve the CreateTsql already generated earlier in the script.  Created Drop TSQL based off evaluating what type of index was present.

* #1921 sp_BlitzIndex adding drops (#1924)

Moving drop and create TSQL to the end of mode 2's results. Closes #1921.

* #1925 sp_Blitz AWS RDS detection (#1926)

Don't just rely on EC2 VM name to detect RDS. Also adds a new result noting that checks were skipped. Closes #1925.

* #1927 sp_BlitzIndex skip rdsadmin db (#1928)

GetAllDatabases = 1 fails when it hits rdsadmin because they're referring to the resource db. Closes #1927.

* 2019_01 Release (#1931)

Prep work for the release - changing version numbers, building build scripts.

* #1933 sp_BlitzIndez Azure SQL DB (#1934)

Check for DaysUptime is null. Closes #1933.

* 1936 Deprecate Power BI Dashboard (#1937)

Closes #1936.

* sp_BlitzFirst - Decimals - Fixes #1940 (#1941)

* batch requests & waits/core/sec are now decimals

* also updated final data set for consistency

* 1950 sp blitz lock azure sql db hyperscale (#1951)

* #1950 sp_BlitzLock Azure SQL DB Hyperscale

Fixes #1950.

* #1950 sp_BlitzLock Azure SQL DB Hyperscale

Oops, forgot my semicolon. Fixes #1950.

* #1947 sp_BlitzIndex stats for current db (#1955)

Can only get stats if you're in the database you're analyzing. Closes #1947.

* #1952 sp_BlitzIndex Fix INSERT query column order (#1954)

* remove table name from create index script (#1942)

* Add Version Checking  for all SP (#1949)

* Update sp_BlitzCache.sql

DECLARE @BlitzCacheVersion     VARCHAR(30);
DECLARE @BlitzCacheVersionDate DATETIME2;
EXEC dbo.sp_BlitzCache @VersionCheckMode = 1, @Version = @BlitzCacheVersion OUTPUT, @VersionDate = @BlitzCacheVersionDate OUTPUT ;
SELECT @BlitzCacheVersion as BlitzCacheVersion , @BlitzCacheVersionDate as BlitzCacheVersionDate

* Update sp_BlitzFirst.sql

* Update sp_BlitzIndex.sql

* Update sp_BlitzLock.sql

* Update sp_BlitzQueryStore.sql

* Update sp_BlitzWho.sql

* Update sp_DatabaseRestore.sql

* Update sp_BlitzInMemoryOLTP.sql

* Update sp_foreachdb.sql

* Update sp_ineachdb.sql

* Update sp_BlitzBackups.sql

* Update sp_Blitz.sql

* Update sp_AllNightLog_Setup.sql

* Update sp_AllNightLog.sql

* Update sp_BlitzInMemoryOLTP.sql

* Update sp_BlitzLock.sql

* sp_ineachdb version check

Tweaking #1948 so it works. Closes #1948.

* Update sp_BlitzCache.sql (#1953)

Complete the join between #missing_index_detail and ##bou_BlitzCacheProcs as otherwise on servers running jobs with many steps, each missing indices will cause #missing_index_pretty to grow exponentially, causing sp_BlitzCache to run for hours.

* Fixes #1943 - sp_Blitz check if SSIS/SSRS/SSAS are running (#1957)

* Update sp_Blitz.sql

* Update sp_Blitz.sql

* Update sp_Blitz Checks by Priority.md

* Update sp_Blitz Checks by Priority.md

* Update sp_Blitz Checks by Priority.md

* altered search strings

because *of course* there's white space. shouldn't hurt too badly because there aren't many services running on sql boxes (hopefully)

* #1943 adding URL (#1960)

For new SSAS/IS/RS check. Closes #1943.

* sp_BlitzCache additional plural checks for @SortOrder (#1963)

* additional plural checks

added in plural checks, also raised error to 16 when invalid sort order is chosen.

* removed unnecessary checks

* minor typo (#1965)

* #1967 sp_Blitz updating supported versions (#1969)

SQL 2012 pre-SP4 is out of support. Closes #1967.

* #1935 sp_BlitzCache Azure compatibility (#1972)

Azure SQL DB compatibility and removing bou from global temp table names. Closes #1935.

* #1973 sp_BlitzIndex truncation error (#1974)

Fixes #1973.

* #1971 add POOL_LOG_RATE_GOVERNOR as poison (#1975)

Closes #1971.

* #1966 fix sp_Blitz check IDs (#1976)

203 and 224 were swapped in the documentation. Closes #1966.

* 20190219 bumping version numbers

To prep for imminent release...

* 20190219 release

Updating install-all-scripts with new versions.

* 2019_02 Release

Bumping version numbers & dates.

* Merge conflicts, good times

* Merge conflicts, whee

* 2019_02 release

Updating build scripts.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.