Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 游标、重新索引和收缩的性能如何?_Sql_Sql Server_Diskspace_Shrink_Reindex - Fatal编程技术网

Sql 游标、重新索引和收缩的性能如何?

Sql 游标、重新索引和收缩的性能如何?,sql,sql-server,diskspace,shrink,reindex,Sql,Sql Server,Diskspace,Shrink,Reindex,我最近了解到,sql server如果我删除一列或修改,它会在后端获得空间,因此我需要重新索引和收缩数据库,我已经完成了,我的数据库大小减小到 2.82至1.62 所以这很明智,所以我现在很困惑 因此,在我的脑海中出现了许多关于这个主题的问题,请帮助我解决这个问题 1.因此,有必要在特定间隔后重新创建索引(刷新) 有必要在特定时间后缩小数据库,以便性能保持最新 如果以上是,则我应该在什么特定时间刷新(收缩)我的数据库 我不知道应该如何解决磁盘间距问题我有77000条记录它需要2.82gb的数据空

我最近了解到,sql server如果我删除一列或修改,它会在后端获得
空间
,因此我需要重新索引和收缩数据库,我已经完成了,我的数据库大小减小到

2.82至1.62

所以这很明智,所以我现在很困惑 因此,在我的脑海中出现了许多关于这个主题的问题,请帮助我解决这个问题 1.因此,有必要在特定间隔后重新创建索引(刷新)

  • 有必要在特定时间后缩小数据库,以便性能保持最新

  • 如果以上是,则我应该在什么特定时间刷新(收缩)我的数据库

  • 我不知道应该如何解决磁盘间距问题我有77000条记录它需要2.82gb的数据空间,这是不可接受的我有两个表,其中一个只有一个表nvarchar(max),所以数据库应该有最小的空间有人能帮我吗提前谢谢


  • 我将为你们简化一些事情,所以你们可能想读一下我在回答中提到的东西

    你必须理解两个概念。已分配空间与可用空间。一个数据库的大小可能是2GB,但它只使用1GB,所以它分配了2GB和1GB的可用空间。收缩数据库时,它会删除可用空间,因此可用空间应为0左右。不要认为文件越小速度越快。随着数据库的增长,它必须再次分配空间。当您收缩文件,然后文件每隔一段时间就会增长时,它无法以连续的方式分配空间。这会造成文件的碎片化,这会使您的速度更慢

    对于数据文件(.mdb)文件,这并不是很糟糕,但随着事务日志的收缩,日志可能会导致虚拟日志文件碎片问题,从而降低速度。因此,简而言之,没有什么理由按计划缩减数据库。去读一下SQL Server中的虚拟日志文件,有很多关于它的文章。这是一篇关于收缩日志文件以及为什么它不好的好文章。把它作为一个起点

    其次,随着时间的推移,索引变得支离破碎。这将主要导致
    SELECT
    查询的性能不佳,但也会影响其他查询。因此,您需要对数据库执行一些索引维护。有关如何对索引进行碎片整理的信息,请参见

    更新:

    重建索引的时间并不明确。索引重建在重建期间锁定索引。基本上,他们在这段时间内处于离线状态。在您的情况下,77000行对于SQL server来说算不了什么。因此,重建索引将消耗服务器资源如果您有enterprise edition,您可以进行在线索引重建,这不会锁定索引,但会占用更多空间

    所以你需要做的是找到一个维护窗口。例如,如果您的系统从8:00到17:00使用,您可以安排在数小时后进行维护重建。使用SQL server代理计划此操作。链接中的脚本可以自动运行

    你的数据库不大。我曾看到,如果IO被拆分到多个磁盘上,SQL server可以处理750GB的表,而不会产生压力。任何数据库服务器最慢的部分不是CPU或RAM,而是到磁盘的IO路径。这是一个巨大的话题。回到您的观点,您正在
    NVARCHAR(MAX)
    字段中存储数据。我想这是一个大文本。因此,缩小数据库后,会看到大小为1,62GB,这意味着数据库中的每一行大约有1,62/77000大,或者大约有22Kb大。这似乎是合理的。将表格导出到文本文件并检查其大小,您会惊讶地发现它可能大于162GB


    如果需要,请随时询问更多详细信息。

    列删除:如果要在删除变量列后回收空间(ALTER TABLE…DROP Column),可以使用DBCC CLEANTABLE:“从表或索引视图中删除的可变长度列回收空间。”()好的,vijay kumar,但是收缩和索引呢?隐藏数据文件->碎片->对于所用空间的性能不好。为什么不使用
    sp_spaceused
    来确定哪个表是问题所在,然后查看该表中的数据。如果要使用NVARCHAR(MAX),则会出现空间问题。您真的需要使用该数据类型吗?您真的在用多种语言存储很长(>8000个字符)的数据吗?3G真的不是一个很大的数据库。这取决于你存储的数据的价值与一个更大的磁盘驱动器的价值。你的数据库和你所拥有的数据一样大。我不理解你的其他评论,我只想说,试着将你的数据类型改为VARCHAR(8000),看看它是否在不截断数据的情况下为你节省了空间。您确定问题出在哪张表上了吗?(或者两者都是)。如果要节省空间,请仅使用正确的数据类型。这实际上可能意味着将ckeditor内容保存到外部文件,并通过FILESTREAM访问它。你这样会有很大的空间。+1答案很好,但我需要更多的解释我的2点和3点在你的答案中你是说你正在使用索引重建,那么什么时候应该是一个特定的时间,什么时候应该点火,怎么点火?@dholakiyaankit目前在公共汽车站看到更新,所以无法获得太多细节。我知道,但我必须这样做我想在it行业工作,非常感谢你,我会用谷歌搜索itI。我只有两个小问题。
    1。维护重建计划包含哪些内容?
    &
    2。如何处理用户输入由于用户输入的复杂性,我选择了数据类型为nvarchar(max),因此如何处理它