SharePoint 2010 RBS FILESTREAM Provider 的“垃圾收集”

news/2025/2/25 16:09:28

在以前的博客中,我曾经介绍过如何在SharePoint 2010系统中安装和配置RBS FILESTREAM Provider,实现将SharePoint中的文件存储到磁盘文件系统中。但是当用户在SharePoint中上载文件时,文件的二进制内容就会通过RBS FILESTREAM Provider,写入到指定的磁盘文件夹之中。通过RBS可以极大的提高SharePoint存储文件的能力,也有效的使SharePoint的内容数据库不会跟着文件数量的增多而不断膨胀。

但是当用户从SharePoint网站上删除一个文件时(并且已经将文件彻底的从SharePoint回收站中删除),RBS FILESTREAM Provider并不会“真正”的从磁盘文件系统把相应的文件也删除掉。为了提高性能,RBS FILESTREAM Provider只会记录下有一个文件被“删除”了,但是要想真正从磁盘文件系统上删除这个物理文件,就需要一些额外的步骤,来完成“垃圾收集”的工作。

RBS FILESTREAM Provider内置了一个命令行维护工具,这个工具就能够实现“垃圾收集”。除此之外,实际上它还可以进行一致性检查、数据维护等诸多工作。但今天我们要讲的,还是集中在如何使用这个维护工具实现“垃圾收集”,来将那些垃圾物理文件从磁盘文件系统上彻底删除。

当RBS FILESTREAM Provider被安装到机器上时,在默认的安装目录中(Program Files\Microsoft SQL Remote Blob Storage 10.50),有一个“Maintainer”文件夹。里面有2个文件:Microsoft.Data.SqlRemoteBlobs.Maintainer.exe和Microsoft.Data.SqlRemoteBlobs.Maintainer.exe.config,前者就是那个命令行维护工具,后者则是维护工具的配置文件。 

在使用维护工具之前,需要打开那个配置文件,在配置文件中指定启用了RBS功能的SharePoint内容数据库的连接字符串。每个内容数据库都需要分别指定一个连接字符串。如果你是第一次打开配置文件,会发现里面的连接字符串默认是使用加密方式保存的。嗯,我个人觉得这实在是一件没有必要的事情,因为维护工具本来就需要直接运行在SharePoint服务器上,这是一件需要服务器管理员权限才能干的事情,所以似乎把服务器上配置文件中的连接字符串进行加密,未免过分小心了…当然,如果你是使用混合认证方式连接到数据库,那把连接字符串加密一下也未尝不可。加密连接字符串的方式是使用aspnet_regiis.exe这个命令行工具。不过在这篇文章中,我就只演示用明文保存连接字符串好了。

下图就是在我的机器上,配置文件的内容。里面只定义了一个连接字符串。连接字符串的名称是“WSS_Content_ConnStr”,连接字符串的内容是“Data Source=sp2010;Initial Catalog=WSS_Content;Integrated Security=True”。这些都需要感觉实际环境中的情况进行修改。如果有多个SharePoint内容数据库都启用了RBS,那么就需要针对它们分别添加多个连接字符串,给每个连接字符串一个不同的名称。

image

接下来就可以在命令行中执行维护工具了。输入如下指令并运行:

Microsoft.Data.SqlRemoteBlobs.Maintainer.exe -ConnectionStringName WSS_Content_ConnStr -Operation GarbageCollection -GarbageCollectionPhases rdo

指令中绿色标记的部分,需要等同于配置文件中所指定的连接字符串名称。维护工具在执行时,会输出一些文字信息,显示出它收集了多少个垃圾文件。

image

如果你在自己的实验环境中执行了上面的指令,很可能发现它并没有删除一个垃圾文件,而如果你重复执行它,它甚至会告诉你,由于间隔时间太短,它“拒绝”频繁运行。这是因为每个SharePoint内容数据库在启用了RBS之后,都会多3个与维护工具相关的时间间隔参数:“delete_scan_period”、“orphan_scan_period”和“garbage_collection_time_window”,它们指定了诸如最小允许的扫描周期、清除垃圾文件周期等等设置。这3个参数会共同影响维护工具的扫描和清除垃圾文件的过程。

在通常情况下,是不需要修改这3个参数的。在实验环境中,为了检验垃圾收集的效果,可以尝试修改这3个参数。打开SQL Server 2008 Management Studio,选中一个SharePoint内容数据库,然后执行:

exec mssqlrbs.rbs_sp_set_config_value 'delete_scan_period','time 00:00:00'

exec mssqlrbs.rbs_sp_set_config_value 'orphan_scan_period','time 00:00:00'

exec mssqlrbs.rbs_sp_set_config_value 'garbage_collection_time_window','time 00:00:00'

上面3条SQL指令将这3个时间间隔参数都设置为0。如果维护工具发现有垃圾文件,在它输出到屏幕的信息中会显示相应的信息。

到现在为止,上面所讲的整个过程就是RBS FILESTREAM Provider的垃圾收集。但是由于RBS FILESTREAM Provider使用了SQL Server 2008中的FILESTREAM特性,而FILESTREAM组件自己对于垃圾文件,也有自己的一套管理方法。换句话说,在RBS的层次,RBS会通过自己的垃圾收集来删除垃圾文件,但这并不会影响到FILESTREAM的层次。即使在RBS层次已经完成了“垃圾收集”,并认为已经把一个文件删除了,但在FILESTREAM层次,却可能仍然不会将文件从磁盘文件系统上删除,除非FILESTREAM组件自己进行一次“垃圾收集”。

强制FILESTREAM进行“垃圾收集”最简单的方法就是在数据库上执行下面这个SQL指令:

CHECKPOINT

最后,对于RBS FILESTREAM Provider维护工具,由于它是一个命令行工具,所以可以使用Windows计划任务来定时执行它。对于FILESTREAM的SQL指令,可以通过SQL Server的作业来定时执行。

参考:

关于RBS“垃圾收集”的详细信息

关于FILESTREAM“垃圾收集”的详细信息

转载于:https://www.cnblogs.com/ningang/p/4299807.html


http://www.niftyadmin.cn/n/1117756.html

相关文章

mysql function fetch_php 遇到报错 Call to a member function fetch_object()

1.检查语法 ,没问题require "fun.php";$kc_sql"select distinct KCM from KCB";//查找课程名$conn new mysqli(localhost,root,,PXSCJ2);$kc_resultmysqli_query($conn,$kc_sql); ///* Select queries return a resultset *///var_dump($kc_res…

Linux 虚存的性能问题

虚存子系统是所有 UNIX 系统的核心组件。下面讨论虚存系统的实现及其对操作系统中几乎其他所有子系统的作用和影响。首先详细说明一些基本的内存管理问题;然后具体分析 Linux 操作系统如何实施虚存管理任务。进程(也标记为任务或默认线程)通过虚存子系统能够查看地址…

CodeIgniter笔记

在使用数据库之前,我们最好将数据库进行自动连接:config/autoload.php自动加载 $autoload[libraries] array(database); 一些常用函数 选择数据 $this->db->select(); 允许你在SQL查询中写 SELECT 部分。 $this->db->where(); $this->db…

Android成长日记-LogCat

1. Log日志级别 Log.v(tag,messag) //verbose模式,打印最详细的日志输出颜色为黑色 Log.d(tag,messag) //debug级别的日志,颜色为蓝色 Log.i(tag,messag) //info级别的日志,颜色为绿色 Log.w(tag,messag) //warn级别的日志,颜色为…

实现Java连接mysql(源码)!

Java连接mysql数据库,代码经过运行准确无误。下面为实例---->用数据库操纵工具(例:SQLyogEnt)操纵mysql建表,或dos下建,如下:数据库名:scutcs表名:student表内容&…

mysql server status_MySQL 状态变量(Server Status Variables)

MySQL状态变量是当前服务器自启动后累计的一些系统状态信息,主要用于评估当前系统资源的使用情况以进一步分析系统性能而做出相应的调整决策。这些状态变量我们可以理解为等同于Oracle数据库的动态性能视图。MySQL的状态变量有很多,比如SQL执行频率&…

mybatis.net - 4 ISqlMapper 传递参数

在使用 mybatis.net 的时候&#xff0c;必然会涉及到命令参数问题。 1. 没有参数的 SQL 最为简单的就是没有参数的命令了。比如下面查询所有的产品&#xff0c;没有使用任何参数。 <select id"GetAllProducts" resultMap"GetAllProductsResult"><…

mongodb 添加复制集

说明&#xff1a;复制集是额外的数据副本&#xff0c;是跨多个服务器同步数据的过程&#xff0c;复制集提供了冗余并增加了数据可用性&#xff0c;通过复制集可以对硬件故障和中断的服务进行恢复。其优点如下&#xff1a;1 . 让数据更安全。2 . 高数据可用性。3 . 灾难恢复。4 …