SQL Server defaults to growing data files by 1MB and transaction logs by 10%; neither of those are best practice. If your database is small they don’t hurt, however as database grows and gets larger, there will be performance issues. Growing a 1TB size database 1MB at a time is painful. And if you have 100GB transaction log file setting it to grow by 10% can be painful also; because you might run of disk space quickly. Another concern is any growth events take a while to execute, so we want to minimize the blocking cause by these.
Best time to grow a database is off-hours, manually, auto growth is there for emergencies not as a replacement for a DBA. Following script helps identify databases with percent growth or growth set to 1MB.
-- SQLCanada, Mohit K. Gupta -- Script from https://sqlcan.wordpress.com -- Last Updated: May 12, 2012 ------------------------------------------ SELECT DB_NAME(database_id) AS DatabaseName, CASE WHEN type_desc = 'ROWS' THEN 'Data' ELSE 'Log' END AS FileType, name AS FileName, physical_name AS FileLocation, CASE WHEN is_percent_growth = 1 THEN CAST(growth AS VARCHAR) + '%' ELSE 'MB' END AS GrowthSetting, CASE WHEN is_percent_growth = 1 THEN CAST((((size*growth)/100)*8)/1024 AS BIGINT) ELSE (growth * 8)/1024 END AS GrowthSize_MB, DATABASEPROPERTYEX(db_name(database_id),'Recovery') AS RecoveryModel, DATABASEPROPERTYEX(db_name(database_id),'Collation') AS DBCollation FROM sys.master_files ORDER BY GrowthSize_MB DESC
Example Output: