小编Ton*_*kle的帖子

在 SQL Server 中,为什么聚簇索引的向后扫描不能不使用并行性?

我一直在阅读有关 SQL Server 内部结构的文章,并且每本书或博客都提到了有关反向扫描的内容。

聚集索引的向后扫描不能使用并行性

唯一说某事的帖子是下面的这个帖子。这篇文章说 SQL Server 团队没有实现反向扫描所需的优化。https://www.itprotoday.com/sql-server/descending-indexes

由于叶级页面是使用双向链表链接的,我不明白为什么向后扫描与向前扫描不同。任何澄清真的很感激。

sql-server clustered-index

22
推荐指数
1
解决办法
901
查看次数

从 AWS EC2 上的 Ubuntu 实例连接时出现“ORA-24454:未设置客户端主机名”

一些背景:我正在尝试连接到 Oracle 数据库。我有用户名、密码、IP 地址、端口和服务名称。我只能从 AWS 上的 Ubuntu EC2 实例访问此数据库,因为 Oracle 数据库位于另一个组织内部。因此,我无权访问这台机器的 DNS 主机名。

我从 Oracle 的网站下载了“Oracle Instant Client with SQL Plus”客户端包并将其解压缩到一个文件夹中。当我尝试运行它时,我收到以下消息:

ORA-24454: 未设置客户端主机名

oracle sqlplus ubuntu amazon-ec2

12
推荐指数
2
解决办法
3万
查看次数

验证现有用户的密码策略

我最近进入了一个环境,其中许多数据库登录都没有enforce_password_policy启用该标志。
即将进行的审计需要验证这些登录的密码。

我使用以下查询来获取登录列表以及标志是打开还是关闭。

select 
    @@SERVERNAME as servername, 
    name, 
    IS_SRVROLEMEMBER('sysadmin', name) as SYSADMIN,
    type_desc,
    create_date,
    is_policy_checked,
    is_disabled,
    password_hash,
    PWDCOMPARE(name, password_hash) as UsernameAsPassword
FROM sys.sql_logins
Run Code Online (Sandbox Code Playgroud)

但是,这并不能告诉我密码是否确实符合密码策略,因为该标志仅在创建用户时相关。

是否有已知的方法来测试现有用户的密码策略合规性?
我无法访问旧密码,我更喜欢不需要它们的方法。

security sql-server sql-server-2008-r2 password

11
推荐指数
1
解决办法
2万
查看次数

SQL Server 2012 SP3 上的内存不足问题

我一直有定期的 SQL Server OOM 错误,有一次 SQL Server 自行关闭并且总是在夜间发生,当时没有人使用它,并且当时没有运行 SQL 代理作业:

这是典型的错误:

08/17/2017 19:31:17,spid100,Unknown,资源池“内部”中的系统内存不足,无法运行此查询。

08/17/2017 19:31:17,spid100,未知,错误:701 严重性:17 状态:123。

08/17/2017 19:31:17,spid112,未知,错误:18056 严重性:20 状态:29。(参数:)。错误以简洁模式打印,因为格式化过程中出现错误。跟踪 ETW 通知等将被跳过。

这是服务器信息:

  • 10GB MIN SQL 服务器内存
  • 21GB 最大 SQL 服务器内存
  • 服务器上只有 4 个 DB
  • 它们的大小每个只有 1 到 2 GB
  • Tempdb 大小从未增长到超过 1GB(设置为自动增长到 10GB)
  • 索引都是低碎片,更新了统计信息
  • 版本:

    Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 
        Oct 20 2015 15:36:27 
        Copyright (c) Microsoft Corporation
        Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
    
    Run Code Online (Sandbox Code Playgroud)

我检查了多个项目:

sql-server memory sql-server-2012

8
推荐指数
1
解决办法
1069
查看次数

系统重启后 SQL Server 服务未自动启动

我有一个每周重新启动的 SQL Server 系统(安装 Windows 更新后)。

在过去的三周里,我看到 SQL Server 服务在服务器恢复时没有启动(配置管理器显示该服务已停止),系统事件日志显示以下错误:

事件 ID 7000

由于以下错误,SQL Server (MSSQLSERVER) 服务无法启动:该服务没有及时响应启动或控制请求。

事件 ID 7001

SQL Server 代理 (MSSQLSERVER) 服务依赖于由于以下错误而无法启动的 SQL Server (MSSQLSERVER) 服务:该服务没有及时响应启动或控制请求。

事件 7009

由于以下错误,SQL Server (MSSQLSERVER) 服务无法启动:该服务没有及时响应启动或控制请求。

但是,我可以手动启动该服务并且它可以正常启动。

该服务设置为自动启动。

不幸的是,SQL Server 错误日志也不包含任何线索。

sql-server windows-server sql-server-2014

8
推荐指数
1
解决办法
7016
查看次数

在回滚的事务中仍会发生哪些事件?

当它们所属的事务被回滚时,所有​​数据修改都被撤消是真的吗?

例如,如果一个游标只执行了 100 次在每次迭代中更新表的存储过程,所有这些更新都会回滚吗?

DDL 语句会回滚吗?...例如 DROP TABLE 或 CREATE VIEW?DROP DATABASE 呢?

我知道某些语句仍然执行,尽管像 PRINT“MESSAGE”。

我只是想了解仍然会发生哪些类型的事件。

sql-server dml transaction ddl sql-server-2016

7
推荐指数
1
解决办法
384
查看次数

SQL Server 2017 安装是否仍需要 .NET Framework 3.5 才能使用数据库邮件?

我猜想在 SQL Server 2017 中使用数据库邮件仍然需要 .NET Framework 3.5?因为不久前我不得不将它包含在我在 Server 2016 上安装的 SQL Server 2016 中。

我无法通过网络找到明确的答案,令人惊讶的是,也许它没有说。

sql-server installation database-mail sql-server-2017

6
推荐指数
1
解决办法
2823
查看次数

更改数据库排序规则的过程

我被要求更改已投入生产几年的数据库的排序规则,因为它在部署时设置不正确。

所以我的研究表明,为了改变所有列的排序规则,你必须放弃约束和其他什么,它看起来很快就会变得丑陋。所以我想只是编写所有对象的脚本,查找/替换对旧排序规则的所有引用,创建新数据库,然后使用 dbatools 复制数据:

Get-DbaDbTable -SqlInstance SourceServer -Database SourceDb |
 foreach-object 
    { Copy-DbaDbTableData -DestinationDatabase TargetDb -DestinationTable $_.Name }
Run Code Online (Sandbox Code Playgroud)

这是更改所有内容排序规则的有效方法吗?乍一看,它似乎运行得相当顺利(即,通过数据迁移没有错误)。

如果重要的话,从 SQL_Latin1_General_CP1_CI_AS 到 SQL_Latin1_General_CP437_CI_AI。

sql-server collation sql-server-2014 dbatools

6
推荐指数
1
解决办法
1668
查看次数

什么是控制 SQL Server 的页面文件使用?SQL Server 还是 Windows?

如果未启用内存中的锁定页面并且 SQL Server 数据被调出到页面文件,SQL Server 是否会决定哪些数据被调出?或者这是由操作系统处理的?

如果 Windows 正在处理这个问题,它会告诉 SQL Server 哪些数据已被调出吗?据我了解,SQL Server 知道 RAM 中有多少数据以及页面文件中有多少数据。但是 SQL Server 是否知道将哪些数据页放在哪里,它是否对数据页放在其中一个或另一个有任何影响?

这是一些背景:

我并不是真的想解决这样的问题。

我的问题更多是关于了解 SQL Server 内部发生了什么......

我遇到了一个应用程序的问题,该应用程序有很长的作业/查询队列,等待 SQL Server 实例处理请求超时。我注意到有问题的数据库上的两个 SELECT 查询短暂地阻塞了一个 UPDATE 和一个 DELETE 查询。不久之后,两个新的 SELECT 阻塞了两个新的 UPDATE 和 DELETE 查询。这继续。

SQL Server 按预期工作 - 只是对于遇到超时的应用程序来说太慢了。

SQL Server 实例位于具有 14 个其他 SQL Server 实例的主动/被动群集上。

我与应用程序开发人员一起解决了这个问题。我们讨论了为实例分配更多 RAM,虽然我并不真正认为这会帮助我将最大服务器内存 (MB) 设置从 40GB 提高到 55GB。在几秒钟内,所有作业在执行的应用程序服务器上排队等待——开发人员正在看着它们非常迅速地从队列中被删除。

托管 SQL Server 的服务器当时没有设置为允许服务帐户在内存中锁定页面,所以我在想,如果处理提到的请求所需的数据放在页面文件中,以及何时分配额外的 RAM数据从页面文件移动到 RAM 也许这可以解释为什么所有作业在分配额外的 RAM 后立即完成得如此之快。

sql-server

6
推荐指数
2
解决办法
2006
查看次数

FILLFACTOR 如何减少页面拆分?

默认的 FILLFACTOR 是 100,我有时被告知将其减少到 80 或更低,以便由于每页上的空白空间而减少页面拆分。

我不明白这一点——如果在默认 FILLFACTOR 为 80 的表上创建新索引,则每页的 20% 空间留空。所以假设一行需要使用 10% 的页面,所以当它满时它可以容纳 10 条记录。FILLFACTOR 为 80,现在只能保存 8 条记录。那么当你添加第 9 条记录时,会出现分页吗?使用 100% FILLFACTOR 时,页面拆分只会发生在第 11 条记录上,因此似乎较低的填充因子会使情况变得更糟。

index sql-server

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