标签: sql-server-2014

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

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
查看次数

还原到较新的 SQL Server 后的统计维护

将 SQL Server 2012 备份还原到 SQL Server 2014 实例并更新兼容性级别时,理想(或必要)的调用顺序是什么?

-- Update Statistics for all tables
EXEC sp_MSforEachtable 'Update Statistics ? with FULLSCAN';

-- Update page and row counts in catalogviews
DBCC UPDATEUSAGE('MY_DATABASE') ;

-- Change DB Compatibility level
EXEC sp_dbcmptlevel 'MY_DATABASE', '120'; 
Run Code Online (Sandbox Code Playgroud)

我不确定数据库兼容性级别是否会影响统计数据或简化服务器上​​的引擎。如果数据库兼容性级别影响统计信息,则应在更新统计信息之前完成。也不清楚是否仍然推荐 UPDATEUSAGE 以及是否也应该在更新统计信息之前。

sql-server sql-server-2012 sql-server-2014

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

一个 SQL Server 2014 提供不同的密码哈希

我一直在使用基于 MicrosoftEXEC sp_help_revlogin脚本的脚本来同步主机之间的 SQL Server 用户名和密码。这在 SQL Server 2008 R2 上已经运行了很长时间,但是随着我们计划迁移到 SQL Server 2014,我遇到了一个障碍。

我有三台暂存 SQL Server 2014 机器。在所有服务器上,我运行以下命令:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = N'1234567890', 
     DEFAULT_DATABASE = [master], 
     CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF
Run Code Online (Sandbox Code Playgroud)

对于其中两个,我得到一个生成的“创建”命令:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = 0x010075DDCA54FCEF12CB11C4E64040E877B9FF5872C41EB98095 HASHED, 
     SID = 0xCA78345104805C4E89004969D05D551B, 
     DEFAULT_DATABASE = [master], 
     CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
Run Code Online (Sandbox Code Playgroud)

凉爽的。到现在为止还挺好。但是,在第三台服务器上,我收到了一个“创建”命令:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = 0x02002F6CB52E7F571AD422689021EB9EC1BE2AB4576AE6EC12485333A4CB892A9197B440E1471376A5AAC5160847F636A637D1F499880D7653ABC4DB4714746856E01DE41E09 HASHED, 
     SID = 0x19337EA32254A64F8FC018474B58DBA5, 
     DEFAULT_DATABASE = [master], 
     CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
Run Code Online (Sandbox Code Playgroud)

哪个不起作用。哈希太大了。 …

sql-server sql-server-2014

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

FullTextSearch 索引/搜索带有特殊字符的单词

我正在尝试为主题标签查询 FullTextSearch 索引列

SELECT Bio FROM Users
WHERE CONTAINS (Bio,'promoter')

SELECT Bio FROM Users
WHERE CONTAINS (Bio,'#promoter')
Run Code Online (Sandbox Code Playgroud)

两个结果都返回相同的记录

promoter of #Art
Run Code Online (Sandbox Code Playgroud)

我还尝试在搜索词周围加上双引号,"#promoter"但结果相同。

当我搜索时出现同样的问题 '@something'

我需要做什么才能使 FullTextSearch 索引特殊字符?

sql-server full-text-search sql-server-2014

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

使用域帐户时 NT 服务帐户是否需要是 SysAdmin

我不确定我是否在谷歌上搜索错误的东西,但我找不到答案。我们正在运行 SQL 2014。SQL Server 和 SQL 代理进程都在域托管服务帐户下运行。

安装 SQL 时NT SERVICE\MSSQLSERVERNT SERVICE\SQLSERVERAGENTNT SERVICE\SQLWriterNT SERVICE\Winmgmt都设置为SysAdmins.

如果我以域用户身份运行 SQL 和 SQL 代理,我是否还需要这些 NT 服务帐户,和/或它们是否需要成为 SysAdmin?

security sql-server sql-server-2014

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

重命名 SQL 日志和主数据库文件

我正在使用 SQL Server 2014。我想知道如何在创建数据库后重命名数据库的 .ldf 和 .mdf 文件?如果可以,步骤是什么?

sql-server sql-server-2014

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

一个表上的索引可以用于另一个表的查询吗?

我在 SQL Server (2014) 工作。

我有一个包含 XML 列的表。有一组众所周知的针对该列的查询,我想将其具体化为用于查询目的的持久计算列。但是,出于各种原因,我不想将这些列添加到表中。

我的问题是,有没有办法创建第二个表,其中包含优化器将用于第一个表的索引/键?这可以通过提示或其他机制实现吗?

performance sql-server sql-server-2014 query-performance

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

EncryptByPassPhrase() 的输出相对于输入有多长?

我正在开始一个加密项目EncryptByPassPhrase(),主要使用VARCHAR值。自然地,加密值比原始值长。是否有一个公式可以用来计算创建新VARBINARY字段需要多长时间,以便保留原始VARCHAR字段的任何可能值?

例如,我检查的第一个字段的长度值最多为 37 个字符,加密值最多为 100 个字节;另一个值最多 50 个字符,加密值最多 124 个字节。但是,短至两个或三个字符的值可以加密到 76 个字节。如果我将新字段的大小设置为 75 + X 字节,我是否有空间存储长度为 X 或更短的任何可能文本值的加密版本?

sql-server encryption sql-server-2014

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

你如何在隐藏资源数据库 mssqlsystemresource 上 GRANT SELECT?

运行此查询时出现错误:

    SELECT 
      dependencies.referencing_id as object_id,
      dependencies.referencing_minor_id as column_id,
      dependencies.referenced_id AS referenced_object_id,
      RTRIM(referenced_objects.type) AS referenced_type
    FROM 
      sys.sql_expression_dependencies AS dependencies
    JOIN sys.objects AS referenced_objects WITH(NOLOCK) ON referenced_objects.object_id = dependencies.referenced_id
    WHERE dependencies.referencing_id != dependencies.referenced_id
Run Code Online (Sandbox Code Playgroud)

错误

对象“sql_expression_dependencies”、数据库“mssqlsystemresource”、架构“sys”的 SELECT 权限被拒绝。

Login 仅具有 PUBLIC 服务器角色的成员资格,并被授予 VIEW ANY DATABASE 和 VIEW ANY DEFINITION。我为我正在比较的数据库添加了一个具有 PUBLIC 数据库角色成员资格的用户。我认为服务器级别的权限就足够了,但我错了。除了 2014 数据库之外,我还在 2008R2 数据库上执行此操作。

在 2014 数据库上,我还授予了服务器级权限 SELECT ALL USER SECURABLES。错误仍然存​​在。

我在数据库上授予用户 SELECT 权限。错误仍然存​​在。

我删除了 SELECT 权限并将用户添加到 data_reader 数据库角色。查询已解决,但未返回任何数据(运行与系统管理员相同的查询返回 130 多行)。现在我完全困惑了。

我在 sys.sql_expression_dependencies 上明确授予用户 SELECT 权限,结果与上述相同。

在研究了这些权限后,共识似乎是将 SELECT 授予数据库上的用户与将用户添加到 data_reader 角色相同。但显然情况并非如此。我想创建一个具有最小权限集的登录/用户来实现比较。 …

sql-server sql-server-2008-r2 sql-server-2014

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

NOT IN(与连接一起)查询

我有两张桌子: PartOrderLine

Part (PartNum PK, PartDesc, Price)

OrderLine (OrderNum PK, PartNum PK, QtyOrdered)
Run Code Online (Sandbox Code Playgroud)

我想找出订购的零件。我想我有一个好主意,但我可能遗漏了一些东西;我认为最有可能在语法上。请检查:

select Part.PartNum
    ,OrderLine.OrderNum
from OrderLine
inner join Part on OrderLine.PartNum = Part.PartNum
where PartNum not in (
        select distinct (OrderNum)
        from OrderLine
        )
Run Code Online (Sandbox Code Playgroud)

这样对吗?

join sql-server t-sql sql-server-2014

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