SQL Server - Snapshot is useful in production environments?

As an opinion based question and answer, I suspect that this will get closed, but here's my two cents.

I have used and seen Database Snapshots in my production environments, although rarely.

Scenario A) We used database snapshots to provide a static image of a database for reporting (ETL to a datawarehouse) purposes. Daily a script would run at the specified time and create a snapshot for reports to use. This database was transactionally consistent as of it's date of creation so useful for that.

Scenario B) A terrible maintenance job that ran and did some analysis of a very deep table and then would start deleting appropriate entries. We created a snapshot at the start of this process to prevent any blocking from taking place. So the maintenance job was changed to get the list of "what needed work" from the snapshot, then drop the snapshot and then "do the work" on the live database.

The use case for database snapshots is niche for anything except CHECKDB. SQL Server does some lock isolation tricks in the background that make it a good choice if you need a quick and dirty fix for certain classes of operations.


[...] Perhaps the biggest hindrance to adoption is that Management Studio didn't offer support[...]

By this he meant that you do not have feature in SSMS to create snapshot of database, you have to rely on TSQL command to create database snapshot. This is also mentioned in Create Database Snapshot official document

The only way to create a SQL Server database snapshot is to use Transact-SQL. SQL Server Management Studio does not support the creation of database snapshots.

I agree the use of word "support" is not entirely clear. It should be that SSMS does not allow database snapshot creation.

The database snapshot "may" be used in production, it all depends on what you want from it and how it suits your requirement. Before going further please read Limitation of Database Snapshot.. Paul Randal has few more points about what can go wrong with database snapshots