标签: sql-server-2014

为可用性组安排备份作业

在 MS SQL Server 2014 AlwaysOn AG 设置中,我想为给定的可用性组安排备份作业。最终目标是在同步的辅助节点上运行定期备份,最重要的是,不受特定辅助节点的可用性限制。

到目前为止,我看到的方法是使用 SQL Server 调度程序,在所有正在运行的实例上设置相同的作业,并将条件逻辑引入调度程序步骤,以确定角色是主要角色还是次要角色。由于以下几个原因,这对我的用例不起作用:

  1. 我只想在辅助节点上运行一次计划操作,但我有多个辅助节点
  2. 我想确保它最终运行,无论是否有任何辅助节点 - 如果没有辅助节点,它应该在主节点上运行

备份作业包括BACKUP LOG [...] WITH COMPRESSION, NOINIT, NOFORMAT每 15 分钟运行一次。

现在,我正在考虑创建一个绑定到相应 AG 的故障转移集群角色的集群计划任务,但想知道是否有更简单和简化的方法来实现这一点。

backup availability-groups sql-server-2014

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

如何从 SQL Server 2014 中的 SQL 作业发送电子邮件

如何从 SQL Server 2014 中的 SQL Server 作业发送电子邮件。我想通过存储过程而不是 Windows 服务来实现电子邮件通知。

sql-server database-mail sql-server-2014

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

为什么我的执行计划(有时)包括左连接?

我发现了一个类似的问题,我知道为了查询表格

SELECT COUNT(1)
FROM foo f
LEFT OUTER JOIN bar b ON f.Value = b.Value AND f.Value = b.Value2
Run Code Online (Sandbox Code Playgroud)

要在不接触的情况下执行bar,需要在有问题的两列上有一个唯一索引。

事实上,到目前为止,这有效,表被定义为:

CREATE TABLE [dbo].[Foo](
    [Value] [varchar](255) NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Bar](
    [Value] [varchar](1024) NULL,
    [Value2] [varchar](1024) NULL
)

CREATE UNIQUE CLUSTERED INDEX [IX] ON [dbo].[Bar]
(
    [Value] ASC,
    [Value2] ASC
)
Run Code Online (Sandbox Code Playgroud)

查询计划没有触及bar,太好了。

在我探索为什么这在我编写的某些应用程序的实际查询中不起作用时,我将那里的查询简化为以下简单的测试,并且查询计划器无法将其从桌子上移开bar

WITH numbers AS (
    SELECT 1 AS i
    UNION ALL SELECT i + 1
    FROM numbers …
Run Code Online (Sandbox Code Playgroud)

join sql-server execution-plan sql-server-2014

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

将字段添加到大表的最快方法

我有一个相当大的表(大约 4 亿行),我需要添加带有 NOT NULL 约束的 bit 类型的新列。我的方法是添加没有 NOT NULL 约束的字段,将字段设置为 0 并更改列以添加 NOT NULL 约束。这是一个相当缓慢的过程。有没有更快的方法?

我使用的是 SQL Server 2014 企业版

sql-server sql-server-2014

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

为什么 AlwaysON 副本的备份大小不同?

我们设置了 SQL Server 2014 Always ON,其中包含一个主要副本和一个辅助副本。我一直在使用 Dell LiteSpeed 在辅助副本上进行数据库备份(完整和 tlog),以便从主副本卸载该流量。我们让一位开发人员截断了一个重要的表,因此我们不得不从完整备份和 tlog 备份中恢复主数据库。在恢复之前,我首先在主数据库上进行了完整的数据库备份,并注意到它只有 34 GB,而辅助数据库的备份几乎是 70 GB。恢复后,人们抱怨性能很慢。我的问题是为什么辅助副本上的数据库备份是主副本的两倍。TIA。

sql-server backup availability-groups sql-server-2014

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

在数据库中手动设置前 10 个产品的顺序

我正在为一个商场创建一个数据库。客户想要手动设置前 10 个品牌或商店。他想随时手动设置订单,例如:

store_Name     priority
Puma             1
Reebok           2
Dominos          3
Nike             4
NumeroUno        5
Run Code Online (Sandbox Code Playgroud)

产品将按优先顺序展示给用户。优先级 1 将显示在顶部。

我的问题是当我想更改商店名称的优先级时,例如我希望耐克显示在搜索顶部。

当我将耐克的优先级设置为 1 时,自动现有的 1 个位置变为 2,2 个位置变为 3,依此类推。如何在 SQL Server(存储过程或触发器)中执行此机制?

我正在使用 SQL Server 2014,我的表有数千个商店。我想要 10 个选择性存储,显示在移动应用程序的顶部。

sql-server sql-server-2014

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

堆和聚集索引的统计 IO 差异

假设我们有两个包含数据的表:

create table heap (value int);
create table clust (value int primary key);
insert into heap values (1);
insert into clust values (1);
Run Code Online (Sandbox Code Playgroud)

通过检查他们的存储统计

select obj.name, st.alloc_unit_type_desc, st.index_level, st.page_count
from (values ('heap'), ('clust')) obj(name)
    join sys.indexes ix on ix.object_id = object_id(obj.name)
    cross apply sys.dm_db_index_physical_stats(
        db_id(), ix.object_id, ix.index_id, NULL, 'DETAILED') st;

select obj.name, au.total_pages, au.used_pages, au.data_pages
from (values ('heap'), ('clust')) obj(name)
    join sys.indexes ix on ix.object_id = object_id(obj.name)
    join sys.partitions p on p.object_id = ix.object_id and p.index_id = ix.index_id
    join sys.allocation_units …
Run Code Online (Sandbox Code Playgroud)

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

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

在 SQL 集群上设置 SPN

我有一个关于如何手动设置 SPN 以在 SQL 集群上使用 Kerberos 身份验证的问题。

我是在集群名称上设置一个 SPN 还是在每个节点上设置一个? 在此处输入图片说明

我还有一个默认的命名实例,我是否指定实例的名称?

sql-server kerberos spn sql-server-2014

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

为每个新插入在数据库中创建 7 位代码

我知道使用身份列,我们可以从 0 一个一个地自动增加键。我想做的是:

在 SQL Server 2014 中生成 9 位数字(操作代码)的代码。

前 2 位数字将被预定义,其余 7 位将在每次新插入记录时递增 1。例如:

51(预定义)和其余 7 是0000001 ,因此插入将发生为:

510000001
510000002
510000003
510000004
510000005
510000006
Run Code Online (Sandbox Code Playgroud)

等等。

sql-server auto-increment sql-server-2014

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

一定数量的列后,SQL Server 中的 INSERT 性能下降

我正在开发一个具有将表格数据导出到指定数据库表的功​​能的应用程序。该应用程序使用INSERT语句将其数据导出到目标数据库。

插入是通过一个批处理INSERT语句完成的,每个 SQL 语句有 100 行INSERT(现在我不能使用BULK INSERTbcp)。

我注意到,当源数据中的列数超过某个数字(该数字不是固定的,取决于值的大小、每个中的行数INSERT等)时,导出时间会不成比例地增加。

例如,导出 50 000 行(500 条INSERT语句,每条语句 100 行)的随机字符串,每个字符串有 100 个字符,每个INSERT需要100 行:

3 秒,5 列
6 秒,10 列
56 秒,15 列
77 秒,20 列

请注意 10 列和 15 列之间的导出时间差异。我原以为 15 列的导出时间为 9-10 秒,但实际上要长 5 倍。在测试其他数据集的导出时,我发现了类似的性能下降。

为了确保问题不在我这边,我INSERT通过sqlcmd.exe. 我得到了类似的结果。

问题:如何让 SQL Server 像处理小列一样快速处理大量列?或者至少将性能下降的点“移动”到更多的列?

额外细节:

  • INSERT 查询是在本地 SQL Server Express 2014(64 位)版本 12.0.5000.0 上执行的;
  • 数据库恢复模式设置为简单;
  • 所有 …

performance sql-server insert sql-server-2014

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