首页 热点资讯 义务教育 高等教育 出国留学 考研考公

如何重置Windows 10上的图标缓存数据库

发布网友

我来回答

2个回答

懂视网

本文的主要内容来源于MongoDB官方博客,由NoSQLFan补充说明,本文对传统的分布式Cache系统进行了分析,指出了其在缓存重建中会对数据库产生巨大压力的问题。并分析了MongoDB的mmap方案是如何规避这一问题的。 如下图的架构,在数据库前端加上分布式的Cache(

本文的主要内容来源于MongoDB官方博客,由NoSQLFan补充说明,本文对传统的分布式Cache系统进行了分析,指出了其在缓存重建中会对数据库产生巨大压力的问题。并分析了MongoDB的mmap方案是如何规避这一问题的。

如下图的架构,在数据库前端加上分布式的Cache(比如我们常用的Memcached),让客户端在访问时先查找Cache,Cache不命中再读数据库并将结构缓存在Cache中。这是目前比较常用的一种分担读压力的方法。

但是这个方法存在一个问题,如果前端的Cache挂掉,或者比较极端的整个机房断电了,那么在机器重启后,原来Cache机器在内存中的缓存会全部清空,在客户端访问过程中,会百分之百的不命中,这样数据库会在瞬间接受巨大的读压力。

试想如果一个GB的缓存失效了,在其重建时,假设与数据库连接的千兆网卡,假设其以极限速度100M每秒从数据库取数据过来重建缓存,那么也需要10分钟才能建完,更何况这是理想情况,对于客户端触发式的随机缓存重建。可能会花掉更长的时间。这还是在数据库能提供100M每秒的数据读请求的前提下。

我们经常看到一些网站挂掉后又恢复,恢复后又挂掉,如此反复几次才能真正恢复,原因就在于其第一次Cache倒了,数据库无法承受相应的读压力,在缓存重建了一小部分后被压死。相当于数据库每重启一次,可以恢复部分缓存,直到缓存的非命中率到达数据库可承受的压力时,才能够真正恢复服务。

这个问题可以用一些可以提供持久化功能的缓存来实现,比如Redis,在未开启aof的情况下,其定期dump出来的rdb文件出能自动恢复出绝大部分数据,当然,在有的时候这可能导致缓存和数据库数据不一致的情况,需要根据应用场景选择性的应用。

上面是对分布式Cache的问题,而对于很多数据库存储,实际上也几乎都是将热数据尽量放在内存中的。但很多数据库在实现上是自己在内存中实现了Cache机制,这样在数据库重启(非操作系统重启)时,这些Cache可能也就随之被清空了,对于数据库来说,也需要重建缓存,而数据库这时所有的操作可能都落在磁盘IO上,带来了同样的问题。

而MongoDB与上面的方式不太一样,MongoDB采用mmap来将数据文件映射到内存中,所以当MongoDB重启时,这些映射的内存并不会清掉,因为它们是由操作系统维护的(所以当操作系统重启时,MongoDB才会有相同问题)。相对于其它一些自己维护Cache的数据库,MongoDB在重启后并不需要进行缓存重建与预热。

另外,新浪微博的timyang也曾经提出过一种缓存重建加锁的方式,也能部分解决此问题。简单来说就是缓存重建时,当多个客户端对同一个缓存数据发起请求时,会在客户端采用加锁等待的方式,对同一个Cache的重建需要获取到相应的锁才行,只有一个客户端能拿到锁,并且只有拿到锁的客户端才能访问数据库重建缓存,其它的客户端都需要等待这个拿到锁的客户端重建好缓存后直接读缓存,其结果是对同一个缓存数据,只进行一次数据库重建访问。

下面是几点比较实用的知识:

●无论使用哪个存储,都最好先搞清楚其缓存重建的过程,如果一次重启就可能导致数据库崩溃,还是小心为好

●重启MongoDB不会导致MongoDB的缓存失效(除非重启服务器)

●当你重新mount磁盘时,文件系统的缓存会失效,这和重启机器时一样,MongoDB也无法避免

●一个使用MongoDB的小技巧,当MongoDB服务器刚启动时,你可以将其所有文件copy到/dev/null中,这会触发操作系统对这些文件的读操作,从而在内存允许的条件下,会将尽可能多的MongoDB数据文件映射到物理内存中。当然,如果在MongoDB运行过程中,你能够判断哪些文件保存的数据是热数据,也可以将这些文件copy到/dev/null 来为其争取更多的物理内存。

参考源:blog.mongodb.org

NoSQLFan

热心网友

在Windows 10上,您在文件和应用程序上看到的那些图标存储在图标缓存数据库中,以允许操作系统在屏幕上快速显示这些图标。 缓存图标的过程,而不是从源中检索它们,有助于防止您的系统被“显示图标”的任务陷入困境。

然而,随着数据库的增长,图标缓存数据库损坏的几率也在增加。 发生这种情况时,桌面和整个操作系统上的图标可能无法正确呈现,甚至显示为损坏。

虽然Windows 10不包括重置数据库的选项,但仍然可以使用命令提示符中的几个命令来解决问题。

在这个Windows 10指南中,我们将指导您完成计算机上的图标缓存数据库在它们显示为空白或损坏时重建的步骤。
如何重建图标缓存数据库
要在Windows 10上重建图标缓存数据库,请关闭您可能正在运行的任何应用程序,然后执行以下操作:
打开开始并搜索命令提示符。
右键单击结果并选择以管理员身份运行。
键入以下命令以导航到图标缓存数据库位置,然后按Enter键:

cd%homepath% AppData Local Microsoft Windows Explorer

键入以下命令以验证图标缓存数据库文件是否位于该位置,然后按Enter键:
dir命令的输出应该列出这些数据库文件:
iconcache_1280.db
iconcache_16.db
iconcache_1920.db
iconcache_256.db
iconcache_2560.db
iconcache_32.db
iconcache_48.db
iconcache_768.db
iconcache_96.db
iconcache_custom_stream.db
iconcache_exif.db
iconcache_idx.db
iconcache_sr.db
iconcache_wide.db
iconcache_wide_alternate.db
如何重置Windows 10上的图标缓存数据库
键入以下命令以停止文件资源管理器,然后按Enter键:
taskkill / f / im explorer.exe
重要:一旦您终止了文件资源管理器,您的桌面背景和任务栏将消失,留下一个黑色屏幕 - 但它没关系,它只是暂时的。您需要关闭文件资源管理器才能删除图标缓存文件。否则,你将无法做到。
键入以下命令以删除iconcache文件,然后按Enter键:
del iconcache *
快速提示:如果您尝试删除文件时拒绝访问,您可能无法以管理员身份运行命令提示符。重复这些步骤,但确保命令提示符以管理权限启动。
键入以下命令以验证是否已成功删除图标缓存文件,然后按Enter键:
dir iconcache *
如果您仍然看到一些iconcache文件,那么很可能某些应用程序仍在运行,这将阻止您删除数据库文件。确保关闭所有,并重复步骤。
键入以下命令以启动文件资源管理器,然后按Enter键:
关闭命令提示以完成任务。
完成这些步骤后,Windows 10将自动使用全新的图标重新创建数据库文件。
请注意,这些步骤不会删除和重新创建缩略图。 但是,如果您的PC上无法正常工作,您可以随时按照我们的指南重建Windows 10上的缩略图缓存。
虽然我们将本指南集中在Windows 10上,您可以在Windows 8.1上使用相同的确切步骤。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com