小编Mar*_*lli的帖子

如何最大限度地减少\提前计划运行 sp_delete_backuphistory 的影响?也衡量收益!

运行以下查询时:

-- DATEADD (datepart , number , date )  

DECLARE @dt DATETIME
SELECT @dt = DATEADD(month,-6,getdate())
select @dt
EXEC msdb.dbo.sp_delete_backuphistory @oldest_date = @dt 
Run Code Online (Sandbox Code Playgroud)

我收到很多锁和块,可能是因为该命令已经有一段时间没有运行了(如果有的话)。

在此输入图像描述

在我实际运行或计划运行此命令之前,有没有办法找出每个涉及的表中有多少要删除的内容?

我使用dateadd来计算 6 个月。

sp_delete_backuphistory中,以下表被修剪:

sp_delete_backuphistory 必须从 msdb 数据库运行并影响以下表:

备份文件

备份文件组

备份媒体家族

备份媒体集

备份集

恢复文件

恢复文件组

恢复历史

monitoring sql-server delete backup scripting

5
推荐指数
1
解决办法
639
查看次数

具有 40000 个产品的表上的碎片影响性能的可能性有多大

所以数据库管理不是我的强项,所以我有几个问题。

这一切都与我正在查看的网站的性能有关,并且花了很多时间进行研究/诊断。

  • 有两个站点,一个测试站点和一个实时站点。
  • 我注意到实时站点上的页面加载时间比测试站点要长得多。

  • 测试站点的规格非常低 - VPS 2 虚拟处理器,14GB RAM 和 SQL + 网站在同一 VPS 上运行

  • 直播网站的规格为 4 台专用服务器,均配备 8 个虚拟处理器和 16GB RAM

  • 实时站点使用单独的 SQL 专用服务器,具有 16 个虚拟处理器和 112GB RAM

  • 该网站在任何时候平均有 120 个并发用户,但可以在 70 到 150 之间波动,当我们发送电子邮件活动时,它可以达到 400。当我们达到 400 时,CPU 可以达到 100%,这取决于用户的操作正在网站上做,但它们与 RAM 保持相当好。

我希望实时网站实际上比测试网站执行得更快,但事实并非如此。我已经查看了代码,但我坚信这是由于数据库造成的。备份时直播网站的数据库大小超过50GB,测试站点为4GB。

两个数据库都非常碎片化,我想知道碎片化影响性能的可能性有多大?

也因为直播网站比测试网站大很多倍,那么高碎片化对直播网站性能的影响会比测试网站大很多吗?

这是产品表中索引之一的捕获。 在此处输入图片说明

因为我以前从未处理过这个关于重建/刷新索引的一些技巧。

我是否应该将网站置于维护模式,以便在我重建/刷新索引时没有人可以与表交互?

一个有 12 个索引和 40000 个产品的表需要多长时间?

谢谢

performance index sql-server fragmentation index-maintenance

5
推荐指数
1
解决办法
530
查看次数

如何停止在链接服务器中使用 sql server 登录凭据?

我有一个位于意大利的链接服务器,server_italia它连接到位于美国俄勒冈州的服务器ORDB1

我们在不同但受信任的域上

从连接server_italiaORDB1通过链接服务器使用具有登录和所要求的权限的SQL Server的帐户进行ORDB1

我是一个sysadmin甚至domain admin在我的域中,而我的server_italia但我只sysadmin在 .sql server 中ORDB1

有一个类似的问题:

如何使用 Windows 身份验证使链接服务器正常工作?

但它没有提供the答案。

这是我的链接服务器:

在此处输入图片说明

当我运行以下查询时,server_italia我得到以下结果:

SELECT [the_server]=@@servername,
auth_scheme 
FROM sys.dm_exec_connections WHERE session_id = @@spid ;  


SELECT net_transport, auth_scheme   
FROM sys.dm_exec_connections   
WHERE session_id = @@SPID; 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在俄勒冈州,我得到了这个:

在此处输入图片说明

如果我的美国同事得到:

  1. 为您的服务帐户运行的服务注册服务主体名称

  2. 在他们的服务器上设置 Kerberos 身份验证

  3. 配置约束委派,因为这将允许传递凭据,否则您可能仍会遇到双跳问题。– 在John Eisbrener的评论中添加

我可以在linked …

sql-server linked-server logins kerberos connectivity

5
推荐指数
1
解决办法
509
查看次数

如何删除数据库中的所有权限?

每次我需要恢复数据库或重新初始化复制发布时,我首先(在恢复的数据库或订阅数据库上)我编写所有权限触发器索引同义词,有时还编写统计信息

然后我执行还原或(应用快照),然后在还原的数据库上重新应用我保存的脚本。

我有一些 LIVE 服务器,其中db_denydatawriter已被大量使用,尽管我拥有以前的所有权限,但由于db_denydatawriter还原附带(因为它处于活动状态),新还原的数据库现在拥有它。

它会导致问题。

以至于现在我有了这个脚本(使用sp_foreachdb)只是为了在测试中删除它:

     declare @db_list NVARCHAR(MAX)


     SELECT @db_list  = STUFF((
                                SELECT ', ' + name FROM sys.databases
                                WHERE name NOT IN ('DBA','TABLEBACKUPS','MASTER','MSDB','MODEL','TEMPDB','distribution')
                                FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')

     SELECT [@db_list]  =@db_list 

     exec sp_foreachdb @database_list = @db_list
                     ,@exclude_list = 'dba,tablebackups,master,msdb,model,tempdb'
                     ,@command='use ?;begin try EXEC sp_droprolemember @rolename = [db_denydatawriter], @membername = [mycompany\Developers] end try begin catch end …
Run Code Online (Sandbox Code Playgroud)

replication sql-server permissions scripting restore

5
推荐指数
1
解决办法
180
查看次数

PostgreSQL - 如何列出表主键的所有外键链接

我有一个res_users带有主键的表id

我想列出id数据库中所有表的所有外键链接。

postgresql foreign-key constraint primary-key scripting

5
推荐指数
1
解决办法
5963
查看次数

查询 sys.dm_exec_query_plan 时出现消息 6355“无法将一个或多个字符从 XML 转换为目标排序规则”

我喜欢在旅途中查找丢失的索引,查看执行计划

如果我想改进当前正在运行的东西,它可能会给我一个进一步的指示。

为此,我使用以下查询:

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


SELECT 
    er.session_id,
    er.blocking_session_id,
    er.start_time,
    er.status,
    dbName = DB_NAME(er.database_id),
    er.wait_type,
    er.wait_time,
    er.last_wait_type,
    er.granted_query_memory,
    er.reads,
    er.logical_reads,
    er.writes,
    er.row_count,
    er.total_elapsed_time,
    er.cpu_time,
    er.open_transaction_count,
    er.open_transaction_count,
    s.text,
    qp.query_plan,
    logDate = CONVERT(DATETIME,GETDATE()),
    logTime = CONVERT(DATETIME,GETDATE())
FROM sys.dm_exec_requests er 
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) s
CROSS APPLY sys.dm_exec_query_plan(er.plan_handle) qp
WHERE 
    CONVERT(VARCHAR(MAX), qp.query_plan) LIKE '%<missing%'
Run Code Online (Sandbox Code Playgroud)

它通常工作正常;但是,我最近遇到了整理和 XML 的问题:

在此处输入图片说明

错误信息说:

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


SELECT 
    er.session_id,
    er.blocking_session_id,
    er.start_time,
    er.status,
    dbName = DB_NAME(er.database_id),
    er.wait_type, …
Run Code Online (Sandbox Code Playgroud)

xml sql-server collation execution-plan encoding

5
推荐指数
1
解决办法
275
查看次数

where 子句中的 dateadd - 在这种特定情况下如何避免完全扫描?

我有以下查询:

SELECT      u.userId,
            app.applicationId
FROM        app.application                 AS app
INNER JOIN  app.applicant                   AS ap   
            ON ap.applicantId = app.applicantId
INNER JOIN  usr.[user]                      AS u    
            ON u.userId = ap.userId
LEFT JOIN   msg.emailTemplateSent           AS t    
            ON t.toUserId = u.userId 
           AND t.emailTemplateName = 'v4_before_sixWeek_latestFlight_reminder'

WHERE       Convert(Date, GETUTCDATE())  = 
            DATEADD(week,-6,Convert(Date, app.flightDateLatest ))

AND         t.emailEventId IS NULL

ORDER BY    app.applicationId ASC
Run Code Online (Sandbox Code Playgroud)

请再次注意where子句的第一行:

Convert(Date, GETUTCDATE())  = DATEADD(week,-6,Convert(Date, app.flightDateLatest ))
Run Code Online (Sandbox Code Playgroud)

我可以以可以使用我的索引的方式更改此设置吗?索引实际上被使用了,但它是一个完整的扫描。

在此输入图像描述

也可以在这里看到:

在此输入图像描述

这是我的索引定义:

USE [APCore];
CREATE NONCLUSTERED INDEX i_flightDateLatest  
ON [app].[application] ( flightDateLatest  ASC  )  
INCLUDE ( [applicantId] , …
Run Code Online (Sandbox Code Playgroud)

index sql-server execution-plan sql-server-2016 query-performance

5
推荐指数
1
解决办法
1251
查看次数

如何杀死已经被杀死的流氓蜘蛛?

我有一个无法杀死的顽固 spid,它阻止了我的 tempdb的事务日志被截断

这就是我发现这个流氓 spid 的方法:

if object_id('tempdb..#OpenTranStatus','U') is not null
   drop table #OpenTranStatus

CREATE TABLE #OpenTranStatus (
ActiveTransaction varchar(25),
Details sql_variant
);
 
-- Execute the command, putting the results in the table.
INSERT INTO #OpenTranStatus
EXEC ('DBCC OPENTRAN (sqlwatch) with tableresults')
SELECT * FROM #OpenTranStatus
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是它正在运行(或保留)的查询:

select d.database_id , sd.sqlwatch_database_id, sd.sql_instance
        into #d
        from dbo.vw_sqlwatch_sys_databases d

        inner join [dbo].[sqlwatch_meta_database] sd 
            on sd.[database_name] = d.[name] collate database_default
            and sd.[database_create_date] = case when d.name = 'tempdb' …
Run Code Online (Sandbox Code Playgroud)

sql-server dbcc transaction tempdb kill

5
推荐指数
1
解决办法
1009
查看次数

TSQL 查找服务器是在动态端口还是静态端口上侦听

使用 TSQL,如何确定 MS SQL 服务器(任何版本)是配置为使用静态端口还是使用动态端口?

我正在尝试使用的脚本:

DECLARE @TcpPort VARCHAR(5)
        ,@RegKey VARCHAR(100)

IF @@SERVICENAME !='MSSQLSERVER'
    BEGIN
        SET @RegKey = 'SOFTWARE\Microsoft\Microsoft SQL Server\' + @@SERVICENAME + '\MSSQLServer\SuperSocketNetLib\Tcp\IPAll'
    END
    ELSE
    BEGIN
        SET @RegKey = 'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER\SUPERSOCKETNETLIB\TCP\IPAll'
    END

EXEC master..xp_regread
    @rootkey = 'HKEY_LOCAL_MACHINE'
    ,@key = @RegKey
    ,@value_name = 'TcpPort'
    ,@value = @TcpPort OUTPUT

EXEC master..xp_regread
    @rootkey = 'HKEY_LOCAL_MACHINE'
    ,@key = @RegKey
    ,@value_name = 'TcpDynamicPorts'
    ,@value = @TcpPort OUTPUT

SELECT @TcpPort AS PortNumber
        ,@@SERVERNAME AS ServerName
        ,@@SERVICENAME AS ServiceName
Run Code Online (Sandbox Code Playgroud)

sql-server dynamic-ports

4
推荐指数
1
解决办法
2917
查看次数

我们应该将日志文件还是数据文件保存在最快的驱动器上?

SSD = 固态硬盘

我们有一个关于服务器 CRM01(营销 CRM 服务器 - 运行大型查询)上的 tempDB 性能的具体问题:

在 CRM01 上,tempDB 数据和日志文件驻留在固态驱动器上。SSD 总大小为 400Gb。Tempdb 数据文件占用 300 Gb,日志占用约 100 Gb,可能需要增加但没有剩余空间。

这个问题是理论上的。我们确实理解: - 如果 tempdb 日志文件增长太多,我们应该拆分我们的进程,以便数据应该以更小的块处理,或者我们应该考虑使用可能的临时物理表而不是 tempdb。

  • 数据和日志 tempdb 文件都应保留在 SSD 上以优化性能

但是,如果由于空间限制我们真的不得不决定将一些 tempdb 文件移出 SSD,您会选择将哪些文件移至标准的快速驱动器:数据文件还是日志文件?

什么不是 tempDB,它是一个普通的 DB。当然,我可以对表进行分区,并创建不同的文件组,但我仍然会将数据或日志保存在最快的磁盘中吗?

假设利用率为 50% 读取和 50% 更新和插入。

@Moderator,我同意问题的第二部分不客观,但它提供了见解和想法。

sql-server database-internals sql-server-2014

4
推荐指数
1
解决办法
1986
查看次数