使用 SQL FileStream 发生内存泄漏

2024-03-06

我有一个使用 SQL FILESTREAM 来存储图像的应用程序。我插入一个LOT图像数量(每天数百万张图像)。

一段时间后,机器停止响应,似乎内存不足……查看 PC 的内存使用情况,我们没有看到任何进程占用大量内存(无论是 SQL 还是我们的应用程序)。我们试图终止我们的进程,但它没有恢复我们的机器...然后我们终止 SQL 服务,但它没有恢复到系统。作为最后的手段,我们甚至杀死了所有进程(系统进程除外),并且内存仍然很高(我们正在任务管理器的性能选项卡中查看)。此时只有重新启动才能完成这项工作。我们在Win7、WinXP、Win2K3服务器上进行了尝试,结果始终相同。

不幸的是,这不是一次性交易,而是每次都会发生。

以前有人见过这种行为吗?我们使用 SQL FILESTREAMS 是否做错了什么?


你说你每天插入很多图像。您还对图像做什么?你更新它们吗,很多人读过?

您的文件系统是否针对 FILESTREAM 进行了优化?

你如何读出图像?

如果您进行了大量更新,请记住 SQL Server 不会修改文件流对象,而是创建一个新文件流对象并将旧文件标记为由垃圾收集器删除。有时 GC 会触发并开始清理旧的混乱情况。 FILESTREAM 的问题是它不会在事务日志中记录大量内容,因此 GC 可能会严重延迟。如果这是问题所在,可以通过强制 GC 更频繁地保持响应来解决。这可以使用以下方法完成检查站 http://msdn.microsoft.com/en-us/library/ms188748.aspx陈述。

UPDATE:对于小文件(小于 1 MB),不应使用 FILESTREAM。数以百万计的小文件会给文件系统和主文件表带来问题。使用 varbinary 代替。也可以看看设计和实现 FILESTREAM 存储 http://msdn.microsoft.com/en-us/library/cc949109.aspx

更新2:如果你仍然坚持使用FILESTREAM来存储(你不应该存储大量的小文件),你至少必须相应地配置文件系统。

优化大量小文件的文件系统(使用这些作为提示并确保您在应用之前了解它们的作用)

  • 更改主文件表 保留到注册表中的最大值(FSUTIL.exe 行为设置 mftzone 4)
  • 禁用8.3文件名(fsutil.exe行为设置disable8dot3 1)
  • 禁用上次访问更新(fsutil.exe 行为设置disablelastaccess 1)
  • 重新启动并创建新分区
  • 使用以下命令格式化存储卷 适合大多数的块大小 文件(2k 或 4k 取决于您 图像文件)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SQL FileStream 发生内存泄漏 的相关文章

随机推荐

  • 如何使用比较器签名创建 NSSortDescriptor?

    我可以创建一个不区分大小写的字符串排序描述符 如下所示 let titleSort NSSortDescriptor key title ascending true selector selector NSString localized
  • 如何在 ASP.net Core WebAPI 中启用 CORS

    我正在尝试做什么 我有一个托管在 Azure 免费计划上的后端 ASP Net Core Web API 在 Net Core中添加默认安全标头 https github com killerrin Portfolio Backend 我还
  • 是否有返回当前项目名称的 git 命令?

    git 是否有内置命令用于显示当前远程项目的名称 现在我正在使用这个 git remote v head n1 awk print 2 sed s sed s git 但似乎会有一个内置的等效项 我一直在寻找相同的信息来自定义我的 shel
  • SPARQL递归祖先查询

    我被 SPARQL 中的递归查询困住了 我无法理解它 我想获得一个实例的所有祖先 a a hasParent b b hasParent c c hasParent d 所以结果将是 b c and d 如果实例是 a 有什么想法如何构造父
  • 表存储(模拟器)插入失败,并显示“请求输入之一无效”。

    我有一个导入过程 它从旧源获取数据并将其放入表存储中 这使我可以重新初始化表存储并根据需要重新开始 它在更新到 10 月份的 Azure SDK for NET VS2012 之前就可以正常工作 现在 插入一些实体后它会失败 似乎有所不同
  • 如何从 lxml 错误中获取更多信息?

    因为我无法使用 XSL IDE 所以我使用 lxml 编写了一个超级简单的 Python 脚本 通过给定的 XSL 转换来转换给定的 XML 文件 并将结果写入文件 如下 有删节 p XMLParser huge tree True xml
  • 页面属性中的 AEM 页面图像不应用 sling:resourceType

    使用 Adob e Experience Manager 5 6 1 AEM 以前称为 CQ5 我尝试创建一个类似于页面属性中的 图像 选项卡的新选项卡 它将被命名为 标志 我基本上只是复制 图像 选项卡来创建徽标选项卡 并重命名路径以反映
  • 有没有办法以编程方式将值保存到 web.config appSettings 而不破坏注释和格式?

    此代码可以工作 但它会破坏 Web config 中的注释和格式 有没有一种方法可以写入 Web config 且不会破坏格式 var webConfig WebConfigurationManager OpenWebConfigurati
  • 如何在 PyTorch 数据加载器中将 RGB 图像转换为灰度图像?

    我已经从 MNIST 数据集中下载了一些示例图像 jpg格式 现在我正在加载这些图像来测试我的预训练模型 transforms to apply to the data trans transforms Compose transforms
  • 尝试在javascript中打开多个窗口

    我需要点击按钮打开多个网址 正在 Chrome 上进行测试 PS 我这样做是为了自己 我只是想打开我每天早上想阅读的所有网址 例如 我不想浪费时间点击每个网址 不确定 javascript 是否是构建此类功能的正确工具 写了下面的代码 它打
  • vscode prettier 不格式化 .tsx 文件

    我已经在 Visual Studio 代码编辑器中使用 Prettier 扩展很长时间了 但最近我一直在使用 Typescript 编写 React 所以我需要配置 Prettier 来格式化 tsx files 使用以下内容编辑设置set
  • 如果我因为想要转向生产而关闭 Play 商店中的公开测试版计划,那么我的应用程序的用户会发生什么情况?

    以前曾有人问过这个问题 但没有提供答案 也没有链接到文档说明如果开发人员有公开测试版程序并决定关闭它 应用程序的用户会发生什么 这些用户是否会自动转换为生产用户 还是必须重新下载应用程序 如果关闭公开测试计划并开始将新的更新推向生产环境 他
  • Python坐标之间的转换

    有没有不同坐标系之间转换的函数 例如 Matlab 有 rho phi cart2pol x y 用于从笛卡尔坐标到极坐标的转换 看起来应该是 numpy 或 scipy 使用 numpy 您可以定义以下内容 import numpy as
  • 设置 Oracle JDBC 瘦客户端的语言

    我想在实际创建 JDBC 连接之前为其指定语言 例如 如果我在中指定了错误的 L P 凭证 DriverManager getConnection url user password 我需要得到ORA错误已本地化为我选择的语言 我使用 Or
  • 具有多个窗口的 SDL 2.0 退出事件

    我正在使用 SDL 2 0 并决定尝试制作多个窗口 不幸的是 现在我无法退出程序而不返回 IDE 并强制关闭它 事件处理尽可能简单 我只轮询退出事件 并且在添加第二个窗口之前它工作得很好 使用多个窗口时是否会忽略退出事件 如果是这样 我怎样
  • 页面重新加载后断点

    页面重新加载后我需要在断点处停止 我在代码中放置了一个断点 但重新加载后它被禁用 putting debugger 在代码中工作正常 但我想知道是否有办法在 firebug 或 chrome 开发工具中做到这一点 可能是您的页面 url 中
  • Eureka检测服务状态

    Context 我们使用 Spring Cloud Netflix 和 Eureka 作为服务发现 使用 Zuul 来代理服务并对其进行负载平衡 微服务使用NodeJS实现 并使用NPM模块注册到Eurekaeureka js 客户端 ht
  • 查询数据集

    我正在将 XML 文件中的数据读取到强类型中DataSet 数据最终存放在多个表中 我可以对其运行查询来创建非规范化视图以显示在DataGrid 输入示例
  • 如何在处理过程中更新 OpenGL 中的显示?

    距离我上次使用 OpenGL 已经过去一年多了 所以我对这个话题已经很生疏了 我正在对一张图像进行一些处理 具体来说是颜色聚类 并且我想在每次循环迭代后更新图像 这样我就可以看到发生的变化 而不是在处理完成后看到变化 这就是目前正在发生的情
  • 使用 SQL FileStream 发生内存泄漏

    我有一个使用 SQL FILESTREAM 来存储图像的应用程序 我插入一个LOT图像数量 每天数百万张图像 一段时间后 机器停止响应 似乎内存不足 查看 PC 的内存使用情况 我们没有看到任何进程占用大量内存 无论是 SQL 还是我们的应