首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS耗尽磁盘空间-- FileGroups可以用来释放一些空间吗?

MS耗尽磁盘空间-- FileGroups可以用来释放一些空间吗?
EN

Database Administration用户
提问于 2020-01-13 05:58:54
回答 2查看 1K关注 0票数 2

问题

我们有一个带有1TB附加磁盘(在Azure上)的Server 2014,磁盘空间正在耗尽。我们还有大约20 We的空间(可能还有几周的空间)。因此,我们需要将一些数据从当前磁盘移动到新磁盘上。

详细信息

服务器

代码语言:javascript
复制
Microsoft SQL Server 2014 - 12.0.2548.0 (X64) 
    Jun  8 2015 11:08:03 
    Copyright (c) Microsoft Corporation
    Web Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

MS 2014安装在一个经典的Azure VM上。这个VM是在一个经典的VNET中。存储磁盘也是经典的。因此,我们不能仅仅扩展现有的磁盘。MS-Support说,如果我们希望利用现代Azure存储来允许磁盘调整大小,使用较新的SSD磁盘等TL,我们需要更新所有这些;DR;我们不能让它离线几个小时,包括所有其他通过IP地址与VM通信的子系统。现在,不要把这个变成火焰节..。这是我们得到的工作,并将需要修复所有这些稍后。

所以现在,一个想法是如何利用FILEGROUPS,并将一个或多个表移动到FILEGROUP中,并将这个FILEGROUP推送到另一个磁盘上,我们已经附加了这个磁盘。

这里的问题是:

  • 首先,这真的是一个非常疯狂和蹩脚的想法吗?
  • 如果是垃圾,但没问题,那么使用FILEGROUPS是否真的会将数据从当前磁盘移动到新磁盘上(这会释放出几乎全部当前磁盘上的一些磁盘空间)?
  • 如果这仍然是可能的,那么移动这些表是否意味着数据被锁定/不可用.这意味着我们仍然回到了最初的问题:
  • 原木呢?移动这些数据意味着日志只需要一个副本?(我相信,我们是每小时和每周备份一次)。

如果数据很小也没问题,但这里有一些表.

第一个表很大(相对于其余的数据)。750 ish

我想在结果图像中移动第四行的第二,第三行。还记得我说过基础设施都是旧的经典东西吗?这意味着HD是老而慢的,所以复制数据也需要一些时间。

作为一个例子,我只是尝试复制.mdf's (这个DB有一个主mdf和其他两个小的)从旧的旧的新磁盘。有一个快速的24小时的ETA。

让网站离线几个小时是完全可以接受的。当顾客睡着的时候,我们可以把东西离线。但是. 24小时..。好痛啊。24小时的想法是一个简单的测试:

  • 创建新的2TB磁盘(如果可能)
  • 关闭sql服务器。
  • 将mdf +日志文件复制到新磁盘。(24小时左右)
  • 从旧位置到新位置的点文件组
  • 再次启动sql server。

现在,我们是开放的想法,我知道堆栈交换不是一个‘意见’的网站,所以我试图保持这个目标与一个建议的答案,并获得反馈意见.但我们对其他解决方案开放,以减少离线时间。

所以-谁能帮忙吗?

更新1

下面是这个DB当前文件的屏幕截图。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2020-01-13 18:02:24

虽然它将工作,但没有必要将表移动到一个新的文件组。

如果简单地向数据库的现有文件组(S)添加一个文件,Server将开始使用新的文件(S)。

当文件组有多个文件时,Server使用“比例填充算法”。因此,如果您向文件组添加一个新文件(可能位于不同卷上),Server将向该文件组写入新数据,直到它与当前文件完全相同为止。

票数 2
EN

Database Administration用户

发布于 2020-01-13 17:02:01

将表移动到一个新的文件组的想法应该是可行的。在移动期间,这些表将处于脱机状态,但随后它们将再次用于查询。您可以通过策略地限制停机时间,一次一次。

注如果您在Enterprise上,您可能可以利用该版本的ONLINE索引操作版本来保持该表可用于查询。因为你在上,所以这不是一种选择。

在这里,我将创建一个数据库,其中包含一个1GB的表:

代码语言:javascript
复制
USE [master];
GO
CREATE DATABASE [257236];
GO
USE [257236];
GO

CREATE TABLE dbo.OneGigTable
(
    Id int IDENTITY(1,1) NOT NULL,
    [BigColumn] nvarchar(max) NOT NULL,

    CONSTRAINT PK_OneGigTable PRIMARY KEY (Id)
);
GO

INSERT INTO dbo.OneGigTable
SELECT TOP (16777216) 
    N'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
FROM master.dbo.spt_values v1
CROSS JOIN master.dbo.spt_values v2
CROSS JOIN master.dbo.spt_values v3;
GO

您可以看到这个数据文件(在默认的主文件组中)大部分是满的:

接下来,我将添加一个新的文件组,并向该组添加一个文件。请注意,您需要将FILENAME设置为新磁盘上的路径。您还应该根据期望移动到它的数据量来适当地调整它的大小:

代码语言:javascript
复制
ALTER DATABASE [257236]
ADD FILEGROUP NewFileGroup;
GO

ALTER DATABASE [257236]
ADD FILE
(
    NAME = NewFile_1,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA\NewFile_1.ndf',
    SIZE = 1024MB
)
TO FILEGROUP NewFileGroup;
GO

现在,在SSMS中运行“磁盘使用情况”报告时,我可以看到新文件大部分是空的:

现在,我将把表重建到新的文件组上:

代码语言:javascript
复制
CREATE UNIQUE CLUSTERED INDEX PK_OneGigTable
ON dbo.OneGigTable (Id)
WITH (DROP_EXISTING = ON)
ON NewFileGroup;

现在可以看到,主文件组大部分是空的,并且所有数据都移动到了新的文件组:

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/257236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档