小编Tho*_*ger的帖子

数据库大小 - MDF 太大?

我正在维护一个 SQL Server 2005 数据库,该数据库承载大约 2.9Tb 的数据(2 x 1.45Tb - 我有一个 RAW 架构和一个 ANALYSIS 架构,因此基本上是摄取的数据的两个副本)。恢复模型很简单,.ldf大小为 6Gb。

无论出于何种原因,.mdf都是 7.5Tb。现在,分析表中可能只有 2-3 个额外的列,并且没有多少NVARCHAR(MAX)列,根据我的理解(可能有错误理解 - 如果我错了,请纠正我)可能会导致额外的空间分配。那是在刚刚缩小数据库之后 - 在此之前它约为 9Tb。有什么想法吗?

并且,如果您有其他问题,请告诉我 - 我对数据库管理和优化工作非常陌生(我通常不做这方面的工作:))。

非常感谢!

安德里亚

sql-server-2005 sql-server shrink

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

AlwaysOn 可用性组自动故障转移不起作用

在玩 AG 设置时,我启动了 WSFC,并在一个名为 DevClusterOnline 的可用性组中配置了两个节点。两个节点(DEV-AWEB5 主节点,DEV-AWEB6 辅助节点)都运行 Windows Server 2008 R2。

如果我检查我的 AG 的健康状况,我会得到:

可用性组运行状况描述

运行下面的查询将返回此结果集: 同步提交和自动故障转移设置

select
    ar.replica_server_name,
    availability_group_name = ag.name,
    ar.availability_mode_desc,
    ar.failover_mode_desc
from sys.availability_replicas ar
inner join sys.availability_groups ag
on ar.group_id = ag.group_id
order by availability_group_name, replica_server_name;
Run Code Online (Sandbox Code Playgroud)

如果我断开 DEV-AWEB5,我无法连接到组侦听器 (DevListener),但是我可以 ping 它并且它会响应我的 ping。副本 - DEV-AWEB6 进入 RESOLVING 状态,我的数据库无法访问。但是,我可以手动进入 Management Studio 并将故障转移设置为 DEV-AWEB6,然后我再次启动并运行,DevListener 将再次接受连接。

考虑到这些事实证实故障转移确实有效,我已经同步提交并配置了自动故障转移,我不知道如果我的设置出现故障怎么办。

当我断开 DEV-AWEB5 的连接时,我希望我的副本会保持连接,因此 DevListener 也会保持连接。我希望自动故障转移将允许我透明地连接到 AG 侦听器。从最终用户的角度来看,使用 Web 系统应该不会注意到其中一台数据库服务器出现故障。

我被困在这里,有人能告诉我我做错了什么吗?

sql-server sql-server-2012 availability-groups

10
推荐指数
1
解决办法
9719
查看次数

sp_execute 需要“int”类型的参数“@handle”

如果目标数据库中存在表,我正在尝试签入存储过程。如果没有,我将使用源数据库中的 information_schema 表创建表。但是,当我使用 sp_execute 尝试恢复表是否存在时,我收到错误过程需要“int”类型的参数“@handle”。

我没有使用@handle 参数。有人能告诉我这个错误是什么意思以及为什么我会收到它吗?我的代码的相关部分如下。

DECLARE @SQL NVARCHAR(MAX),
        @Parameters NVARCHAR(4000),
        @TableNotExists INT,
        @SourceTable NVARCHAR(200),
        @DestDB NVARCHAR(200)

BEGIN

SET @SourceTable = 'table'
SET @DestDB = 'database'
SET @Parameters = N'@SourceTableIN NVARCHAR(200), @TableNotExistsOut INT OUTPUT'
SET @SQL = N'USE [' + @DestDB + '] IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_NAME = @SourceTableIN)
BEGIN SET @TableNotExistOUT = 1 END'

EXEC sp_Execute @SQL, @Parameters, @SourceTableIN = @SourceTable, @TableNotExistsOUt = @TableNotExists OUTPUT

END
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server dynamic-sql t-sql

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

识别文件增长事件

我在我的投资组合中发现了许多使用默认自动增长设置(1 MB 或 10% 增量)创建的数据库,这些数据库已经扩展了很长一段时间。如果我想了解每个 DB 文件的外部碎片量,是否可以从元数据中获取 DB 文件的大小修改次数(通过自动增长或手动)?澄清一下,我是否可以从元数据中获取 DB 生命周期内 DB 文件修改的历史记录,而不仅仅是因为实例重启?

sql-server datafile

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

IO_STALL 问题和理解

我每 5 分钟从 sys.dm_io_virtual_file_stats 收集 IO_STALLS,然后进行增量以查看哪些文件受 IO 影响最大。

在一个 5 分钟的时间内,我得到了 5826331 毫秒的增量,即 97 分钟。

我对此有点困惑,这是说 97 分钟前开始的操作仅在那时完成并因此记录了等待时间?

谢谢

根据要求添加代码:

/*

USE [SysDBA]
GO
*/
/****** Object:  Table [dbo].[DISKIOPS]    Script Date: 04/07/2013 11:40:15 ******/
/*
DROP TABLE [dbo].[DISKIOPS]
GO
*/
--Create the table
/****** Object:  Table [dbo].[DISKIOPS]    Script Date: 04/07/2013 11:40:15 ******/
/*
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[DISKIOPS](
    [IO_STALL] [bigint] NULL,
    [IO_STALL_READ_MS] [bigint] NULL,
    [IO_STALL_WRITE_MS] [bigint] NULL,
    [NUM_OF_READS] [bigint] NULL, …
Run Code Online (Sandbox Code Playgroud)

performance sql-server

9
推荐指数
1
解决办法
4376
查看次数

ALTER TABLE ... 从常规表切换到分区表失败

下面的代码执行以下操作:

  1. 在 C:\TEMP 中创建数据库 play_partition
  2. 创建两个相同的分区表 play_table 和 archive_play_table
  3. 将 play_table 分区 1 切换到 archive_play_table 分区 1
  4. 在与 play_table 分区 2 相同的文件组上创建一个与 play_table 具有相同结构的新未分区表 temp_table
  5. 将 play_table_partition 2 切换到 temp_table
  6. 尝试将 temp_table 切换回 play_table 分区 2 并失败

    消息 4982,级别 16,状态 1,第 64 行 ALTER TABLE SWITCH 语句失败。检查源表“play_partition.dbo.temp_table”的约束允许目标表“play_partition.dbo.play_table”上的分区 2 定义的范围不允许的值。

为什么会失败?

我使用的是 SQL Server 2014(企业版试用版)。

问候,

科林戴利

http://www.colindaley.com/translator

/* Playing with partitioned tables */

USE master;
GO

DROP DATABASE play_partition;
GO

CREATE DATABASE play_partition
    ON PRIMARY(
        NAME = play_partition
        , FILENAME …
Run Code Online (Sandbox Code Playgroud)

sql-server partitioning sql-server-2014

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

无法恢复(错误 3456)

我有一个不容易弄清楚的情况,我想我会在这个论坛上问其他人是否有建议。

我在 Windows Server 2008R2 Enterprise 上运行 SQL Server 2008 R2 Standard SP3。

一个数据库需要一些维护,事后我需要在另一台服务器上恢复。我使用 COPY_ONLY 和一组 4 个 tlog 备份完成了完整的数据库备份。

  1. 在开始之前,创建 tlogbackup1
  2. 更改FULLBULK_LOGGED恢复模式
  3. 添加新文件组
  4. 将文件添加到新文件组
  5. 将新文件组设置为默认值
  6. 选择到表中(在新文件组上)
  7. 删除原始表
  8. 删除原始文件
  9. 删除原始文件组
  10. 更改新表的名称以匹配原始表
  11. 更改新文件组的文件名以匹配原始文件组
  12. 更改目录中的文件名以匹配原始文件名
  13. 在操作系统级别更改文件名以匹配原始文件名
  14. 将默认文件组设置为原始文件组
  15. 使数据库在线
  16. 更改BULK_LOGGEDFULL恢复模式
  17. 完成所有步骤后,创建 tlogbackup2

由于还原服务器上的驱动器号更改,所有备份的还原必须使用 WITH MOVE。

恢复步骤:

RESTORE database SomeDB FROM DISK = 'D:\REPRO\SomeDB.bak'   
WITH 
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1

RESTORE LOG SomeDB FROM DISK …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 recovery restore

9
推荐指数
1
解决办法
2605
查看次数

列出准备好的语句

有人知道我如何列出 SQL Server 实例中的准备好的语句吗?

sql-server-2008 sql-server prepared-statement

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

调整内存分配和MAXDOP后是否应该重新启动实例?

据我所知,调整最大服务器内存最大并行度不需要重新启动实例。新设置会不会不重启就一直生效?

sql-server sql-server-2012

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

在 Management Studio 中创建表组子文件夹

当我在浏览master数据库时,SSMS我注意到在Tables文件夹下还有一个名为的文件夹Systems Tables,里面有一堆表格。我们是否有可能Systems Tables在我们的数据库中创建一个类似的结构?

我希望将表和存储过程组织到项目特定的文件夹中。在新设置下 - 当我指的是我的表对象时,我将不得不使用以下语法(我在这里猜测):

[dbName].[projectName].[dbo].[tableName] 
Run Code Online (Sandbox Code Playgroud)

此外,除了清理混乱之外,是否有人预见到由于这种重组而导致的任何性能改进/降级?我用Microsoft SQL Server 2008 R2.

database-design sql-server ssms

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