首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为数据库启用AUTO_CREATE_STATISTICS/AUTO_UPDATE_STATISTICS

如何为数据库启用AUTO_CREATE_STATISTICS/AUTO_UPDATE_STATISTICS
EN

Database Administration用户
提问于 2019-12-24 08:27:51
回答 2查看 2.2K关注 0票数 2

我有一个项目数据库,该数据库维护来自不同环境(dev、test、prod、predprod.)的不同数据库,我需要检查AUTO_CREATE_STATISTICSAUTO_UPDATE_STATISTICSis是否针对每个DB设置为OFF/ON,以及它的OFF是否将其更改为ON

代码语言:javascript
复制
ALTER DATABASE  DB
SET AUTO_CREATE_STATISTICS ON

ALTER DATABASE  DB
SET AUTO_UPDATE_STATISTICS ON

我怎样才能做到这一点?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-12-24 09:14:49

这使用动态SQL查询。它不包括系统数据库。检查is_auto_create_stats_onis_auto_update_stats_on 0 OFF并将其更改为ON

代码语言:javascript
复制
declare @sql    nvarchar(max);

; with 
db as
(
    select  name, is_auto_create_stats_on, is_auto_update_stats_on 
    from    sys.databases
    where   name    not in ('master', 'tempdb', 'model', 'msdb')
    and     (
                is_auto_create_stats_on = 0
            or  is_auto_update_stats_on = 0
            )
)
select  @sql    = isnull(@sql + char(13), '')
                + 'ALTER DATABASE ' + quotename(db.name) + ' '
                + 'SET ' + o.opt + ' ON;'
from    db 
        cross apply
        (
            select  opt = 'AUTO_CREATE_STATISTICS'
            where   is_auto_create_stats_on = 0

            union all

            select  opt = 'AUTO_UPDATE_STATISTICS'
            where   is_auto_update_stats_on = 0
        ) o

-- print out for verification before execute
print   @sql
exec    sp_executesql @sql

您可以在实际执行之前屏蔽sp_executesql并验证结果。

票数 4
EN

Database Administration用户

发布于 2019-12-24 08:49:48

代码语言:javascript
复制
DECLARE @SQL    NVARCHAR(MAX) = ''

-- getting the commands list
SET @SQL = (
    SELECT '' + x.cmd
    FROM (
        select 'ALTER DATABASE ' + QUOTENAME(name) + ' SET AUTO_CREATE_STATISTICS ON;' AS cmd
        from sys.databases
        WHERE database_id > 4
            AND is_auto_create_stats_on = 0
        UNION ALL
        select 'ALTER DATABASE ' + QUOTENAME(name) + ' SET AUTO_UPDATE_STATISTICS ON;'
        from sys.databases
        WHERE database_id > 4
            AND is_auto_update_stats_on = 0
    ) x
    FOR XML PATH('')
);

IF @SQL IS NOT NULL BEGIN
    SELECT @SQL;

--uncomment to execute
--  EXEC sp_executesql @SQL;
END
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/256222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档