『壹』 二級緩存如何設置
能改嗎???好像不能吧?!最多隻能說優化大師最大可以支持6M的緩存(很超前哦!!)因為現在的都一般1~2M,完全能滿足需要的哈。還有512K的呢。多著呢。不信你就在網路搜一下就是了。
下面給你個樣本
『貳』 如何開啟.CPU的一級緩存和二級緩存,詳細點,
要想提高CPU的性能,CPU的一級緩存和二級緩存是必須打開,這樣可以減少CPU在存儲器讀/寫周期中的等待時間。
第一步:在CMOS Setup主菜單中選擇「Advanced BIOS Features(高級BIOS功能設置)」。
第二步:將「Internal Cache(內部緩存)」選項(或者「CPU L1 & L2 Cache」選項)設置成「Enabled」,這樣就可以加速CPU的訪問速度。如果BIOS在打開此功能之後出現了異常情況,請關閉此功能。
『叄』 二級緩存是什麼
二級緩存的工作原理是當CPU要讀取一個數據時,首先從緩存中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。
二級緩存是CPU性能表現的關鍵之一,在CPU核心不變化的情況下,增加二級緩存容量能使性能大幅度提高。二級緩存的容量分為128KB、256KB、512KB、1MB、2MB等。Intel雙核心處理器的二級緩存,Intel的雙核心CPU主要有Pentium D、Pentium EE、Core Duo三種,其中Pentium D、Pentium EE的二級緩存方式完全相同。Pentium D和Pentium EE的二級緩存都是CPU內部兩個內核具有互相獨立的二級緩存。
二級緩存的作用:
CPU在緩存中找到有用的數據被稱為命中,當緩存中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。從理論上講,在一顆擁有二級緩存的CPU中,讀取一級緩存的命中率為80%。也就是說CPU一級緩存中找到的有用數據占數據總量的80%,剩下的20%從二級緩存中讀取。由於不能准確預測將要執行的數據,讀取二級緩存的命中率也在80%左右(從二級緩存讀到有用的數據占總數據的16%)。那麼還有的數據就不得不從內存調用,但這已經是一個相當小的比例了。目前的較高端的CPU中,還會帶有三級緩存,它是為讀取二級緩存後未命中的數據設計的—種緩存,在擁有三級緩存的CPU中,只有約5%的數據需要從內存中調用,這進一步提高了CPU的效率。
為了保證CPU訪問時有較高的命中率,緩存中的內容應該按一定的演算法替換。一種較常用的演算法是「最近最少使用演算法」(LRU演算法),它是將最近一段時間內最少被訪問過的行淘汰出局。因此需要為每行設置一個計數器,LRU演算法是把命中行的計數器清零,其他各行計數器加1。當需要替換時淘汰行計數器計數值最大的數據行出局。這是一種高效、科學的演算法,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出緩存,提高緩存的利用率。
『肆』 怎樣開啟cpu緩存
CPU的二級緩存是默認開啟的,所謂的在注冊表中修改相應的secondlevelcache鍵值來打開二級緩存是不對的,那隻是一個映射,如果不開啟二級緩存,電腦的性能會很受影響.
Windows XP系統中,默認狀態下CPU二級緩存並未打開。為了提高系統性能,我們可以通過修改注冊表,或使用「Windows優化大師」等軟體來開啟它。
運行注冊表編輯器,展開HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management分支,雙擊右側窗口中的「SecondLevelDataCace」,然後在彈出的窗口中直接填入當前計算機所使用的CPU的二級緩存容量即可。
賽揚處理器的二級緩存為128KB,應將其值設置為80(16進制,下同)。PⅡ、PⅢ、P4均為512KB二級緩存,應設置為200;PⅢE(EB)、P4 Willamette只有256KB二級緩存,應設置為100;AMD Duron只有64KB二級緩存,應設置為40;K6-3擁有256KB二級緩存;Athlon擁有512KB二級緩存;Athlon XP擁有256KB二級緩存;Athlon XP(Barton核心)擁有512KB二級緩存。
使用Windows優化大師也可以正確設置CPU的二級緩存:啟動Windows優化大師,選擇「系統性能優化」,在「文件系統優化」中,最上面就是關於CPU二級緩存的設置項。拖動滑塊到相應的位置後,保存設置並重新啟動計算機即可。
『伍』 英特爾的CPU的二級緩存要不要人工開啟
一般情況下是開啟過了,如果沒有開啟的話估計要刷Bios ,我就遇到過,我的P4-630也是2M的二級緩存,但在Bios裡面不顯示,去下了個925主板的最新Bios刷了後就顯示2M的二級緩存了。
『陸』 怎樣打開BIOS裡面的二級緩存
開機,照屏幕提示進BIOS(通常是按DEL鍵,也有些主板是按F2或其他的鍵),找到CPU Cache L2一項,設置為Enable,按F10保存退出即可。不過這個問題多半是系統有問題,跟CPU的二級緩存應該沒啥關系。
『柒』 mybatis怎麼開啟二級緩存
深入了解MyBatis二級緩存
一、創建Cache的完整過程
我們從sqlSessionFactoryBuilder解析mybatis-config.xml配置文件開始:
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
然後是:
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
return build(parser.parse());
看parser.parse()方法:
parseConfiguration(parser.evalNode("/configuration"));
看處理Mapper.xml文件的位置:
mapperElement(root.evalNode("mappers"));
看處理Mapper.xml的XMLMapperBuilder:
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration,
resource, configuration.getSqlFragments());
mapperParser.parse();
繼續看parse方法:
configurationElement(parser.evalNode("/mapper"));
到這里:
String namespace = context.getStringAttribute("namespace");
if (namespace.equals("")) {
throw new BuilderException("Mapper's namespace cannot be empty");
}
builderAssistant.setCurrentNamespace(namespace);
cacheRefElement(context.evalNode("cache-ref"));
cacheElement(context.evalNode("cache"));
從這里看到namespace就是xml中<mapper>元素的屬性。然後下面是先後處理的cache-ref和cache,後面的cache會覆蓋前面的cache-ref,但是如果一開始cache-ref沒有找到引用的cache,他就不會被覆蓋,會一直到最後處理完成為止,最後如果存在cache,反而會被cache-ref覆蓋。這里是不是看著有點暈、有點亂看所以千萬別同時配置這兩個,實際上也很少有人會這么做。
看看MyBatis如何處理<cache/>:
private void cacheElement(XNode context) throws Exception {
if (context != null) {
String type = context.getStringAttribute("type", "PERPETUAL");
Class<? extends Cache> typeClass = typeAliasRegistry.resolveAlias(type);
String eviction = context.getStringAttribute("eviction", "LRU");
Class<? extends Cache> evictionClass = typeAliasRegistry.resolveAlias(eviction);
Long flushInterval = context.getLongAttribute("flushInterval");
Integer size = context.getIntAttribute("size");
boolean readWrite = !context.getBooleanAttribute("readOnly", false);
boolean blocking = context.getBooleanAttribute("blocking", false);
Properties props = context.getChildrenAsProperties();
builderAssistant.useNewCache(typeClass, evictionClass,
flushInterval, size, readWrite, blocking, props);
}
}
從源碼可以看到MyBatis讀取了那些屬性,而且很容易可以到這些屬性的默認值。
創建Java的cache對象方法為builderAssistant.useNewCache,我們看看這段代碼:
public Cache useNewCache(Class<? extends Cache> typeClass,
Class<? extends Cache> evictionClass,
Long flushInterval,
Integer size,
boolean readWrite,
boolean blocking,
Properties props) {
typeClass = valueOrDefault(typeClass, PerpetualCache.class);
evictionClass = valueOrDefault(evictionClass, LruCache.class);
Cache cache = new CacheBuilder(currentNamespace)
.implementation(typeClass)
.addDecorator(evictionClass)
.clearInterval(flushInterval)
.size(size)
.readWrite(readWrite)
.blocking(blocking)
.properties(props)
.build();
configuration.addCache(cache);
currentCache = cache;
return cache;
}
從調用該方法的地方,我們可以看到並沒有使用返回值cache,在後面的過程中創建MappedStatement的時候使用了currentCache。
二、使用Cache過程
在系統中,使用Cache的地方在CachingExecutor中:
@Override
public <E> List<E> query(
MappedStatement ms, Object parameterObject,
RowBounds rowBounds, ResultHandler resultHandler,
CacheKey key, BoundSql boundSql) throws SQLException {
Cache cache = ms.getCache();
獲取cache後,先判斷是否有二級緩存。
只有通過<cache/>,<cache-ref/>或@CacheNamespace,@CacheNamespaceRef標記使用緩存的Mapper.xml或Mapper介面(同一個namespace,不能同時使用)才會有二級緩存。
if (cache != null) {
如果cache存在,那麼會根據sql配置(<insert>,<select>,<update>,<delete>的flushCache屬性來確定是否清空緩存。
flushCacheIfRequired(ms);
然後根據xml配置的屬性useCache來判斷是否使用緩存(resultHandler一般使用的默認值,很少會null)。
if (ms.isUseCache() && resultHandler == null) {
確保方法沒有Out類型的參數,mybatis不支持存儲過程的緩存,所以如果是存儲過程,這里就會報錯。
ensureNoOutParams(ms, parameterObject, boundSql);
沒有問題後,就會從cache中根據key來取值:
@SuppressWarnings("unchecked")
List<E> list = (List<E>) tcm.getObject(cache, key);
如果沒有緩存,就會執行查詢,並且將查詢結果放到緩存中。
if (list == null) {
list = delegate.<E>query(ms, parameterObject,
rowBounds, resultHandler, key, boundSql);
tcm.putObject(cache, key, list); // issue #578 and #116
}
返回結果
return list;
}
}
沒有緩存時,直接執行查詢
return delegate.<E>query(ms, parameterObject, rowBounds, resultHandler, key, boundSql);
}
在上面的代碼中tcm.putObject(cache, key, list);這句代碼是緩存了結果。但是實際上直到sqlsession關閉,MyBatis才以序列化的形式保存到了一個Map(默認的緩存配置)中。
三、Cache使用時的注意事項
1. 只能在【只有單表操作】的表上使用緩存
不只是要保證這個表在整個系統中只有單表操作,而且和該表有關的全部操作必須全部在一個namespace下。
2. 在可以保證查詢遠遠大於insert,update,delete操作的情況下使用緩存
這一點不需要多說,所有人都應該清楚。記住,這一點需要保證在1的前提下才可以!
四、避免使用二級緩存
可能會有很多人不理解這里,二級緩存帶來的好處遠遠比不上他所隱藏的危害。
緩存是以namespace為單位的,不同namespace下的操作互不影響。
insert,update,delete操作會清空所在namespace下的全部緩存。
通常使用MyBatis Generator生成的代碼中,都是各個表獨立的,每個表都有自己的namespace。
為什麼避免使用二級緩存
在符合【Cache使用時的注意事項】的要求時,並沒有什麼危害。
其他情況就會有很多危害了。
針對一個表的某些操作不在他獨立的namespace下進行。
例如在UserMapper.xml中有大多數針對user表的操作。但是在一個XXXMapper.xml中,還有針對user單表的操作。
這會導致user在兩個命名空間下的數據不一致。如果在UserMapper.xml中做了刷新緩存的操作,在XXXMapper.xml中緩存仍然有效,如果有針對user的單表查詢,使用緩存的結果可能會不正確。
更危險的情況是在XXXMapper.xml做了insert,update,delete操作時,會導致UserMapper.xml中的各種操作充滿未知和風險。
有關這樣單表的操作可能不常見。但是你也許想到了一種常見的情況。
多表操作一定不能使用緩存
為什麼不能看
首先不管多表操作寫到那個namespace下,都會存在某個表不在這個namespace下的情況。
例如兩個表:role和user_role,如果我想查詢出某個用戶的全部角色role,就一定會涉及到多表的操作。
<select id="selectUserRoles" resultType="UserRoleVO">
select * from user_role a,role b where a.roleid = b.roleid and a.userid = #{userid}
</select>123123
像上面這個查詢,你會寫到那個xml中呢看看
不管是寫到RoleMapper.xml還是UserRoleMapper.xml,或者是一個獨立的XxxMapper.xml中。如果使用了二級緩存,都會導致上面這個查詢結果可能不正確。
如果你正好修改了這個用戶的角色,上面這個查詢使用緩存的時候結果就是錯的。
這點應該很容易理解。
在我看來,就以MyBatis目前的緩存方式來看是無解的。多表操作根本不能緩存。
如果你讓他們都使用同一個namespace(通過<cache-ref>)來避免臟數據,那就失去了緩存的意義。
看到這里,實際上就是說,二級緩存不能用。整篇文章介紹這么多也沒什麼用了。
五、挽救二級緩存看
想更高效率的使用二級緩存是解決不了了。
但是解決多表操作避免臟數據還是有法解決的。解決思路就是通過攔截器判斷執行的sql涉及到那些表(可以用jsqlparser解析),然後把相關表的緩存自動清空。但是這種方式對緩存的使用效率是很低的。
設計這樣一個插件是相當復雜的,既然我沒想著去實現,就不廢話了。
最後還是建議,放棄二級緩存,在業務層使用可控制的緩存代替更好。
『捌』 怎麼修改cpu的二級緩存
對於處理器(CPU)二級緩存(L2 Cache)的作用,想必大家都多多少少有一定了解,即使不完全明白其中道理,至少也可以從Pentium 4和Celeron的差價判斷出其重要性,256KB二級緩存的Celeron D 2.4GHz比512KB二級緩存的Pentium 4 2.4C便宜近一半。如果這時候有人說Windows XP操作系統並沒有充分利用CPU的二級緩存,你會怎麼想?這簡直就是在浪費用戶的投資嘛!
事實上,有一種廣為流傳的說法是Windows XP沒有對CPU進行優化,理由就是它默認狀態下並沒有打開CPU的二級緩存。如果你打開注冊表編輯器,找到「HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Control\Session Manager\Memory Management」,在其中可以看到一個名為「SecondLevelDataCache」的項,它的默認值為「0」。再明顯不過了,「SecondLevelDataCache」就是二級數據緩存的意思,既然被設置為「0」,那就是關閉了二級緩存。
正是基於以上論斷,才出現了優化二級緩存的技巧,也就是把「SecondLevelDataCache」的值設置為CPU的二級緩存容量(單位KB)。在眾多的優化軟體中也包含了優化CPU二級緩存的設置。
事實上,修改「SecondLevel DataCache」的值沒有任何優化作用,這是為什麼呢?
我們在微軟的知識庫中找到了如下的內容:「HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management」中的SecondLevelDataCache鍵的值只有在Windows XP系統從硬體抽象層(Hardware Abstraction Layer )讀取CPU二級緩存(L2)失敗時才會讀取SecondLevelDataCache鍵的數據。而且SecondLevelDataCache鍵值=0的意義是二級緩存為256KB。
在一篇知識庫文章中我們還找到了「Do not change the SecondLevelDataCache entry 」這樣的話,在文章中指出一些第三方資料宣稱修改SecondLevelDataCache鍵的值可以提高系統性能是不正確的。二級緩存的數值是由操作系統檢測並且完全不受SecondLevelDataCache值的影響。
從微軟知識庫的文章中我們可以看到,所謂的Windows用戶需要用戶手動打開二級緩存這種說法是錯誤的。Windows系統是根據硬體抽象層讀取CPU的二級緩存數值。只有在讀取失敗時才會讀取SecondLevelDataCache的值,而且SecondLevelDataCache的默認數值0所代表的意義就是二級緩存為256KB,而不是表示關閉。所以CPU的二級緩存在任何時候都是開啟的,用戶沒有必要再自行修改。
因此,無論是WindowsXP還是Vista都無需對此項進行優化,純粹是自欺欺人。
『玖』 求如何開啟二級緩存
CPU的二級緩存是默認開啟的,所謂的在注冊表中修改相應的secondlevelcache鍵值來打開二級緩存是不對的,那隻是一個映射,如果不開啟二級緩存,電腦的性能會很受影響.
Windows XP系統中,默認狀態下CPU二級緩存並未打開。為了提高系統性能,我們可以通過修改注冊表,或使用「Windows優化大師」等軟體來開啟它。
運行注冊表編輯器,展開HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management分支,雙擊右側窗口中的「SecondLevelDataCace」,然後在彈出的窗口中直接填入當前計算機所使用的CPU的二級緩存容量即可。
賽揚處理器的二級緩存為128KB,應將其值設置為80(16進制,下同)。PⅡ、PⅢ、P4均為512KB二級緩存,應設置為200;PⅢE(EB)、P4 Willamette只有256KB二級緩存,應設置為100;AMD Duron只有64KB二級緩存,應設置為40;K6-3擁有256KB二級緩存;Athlon擁有512KB二級緩存;Athlon XP擁有256KB二級緩存;Athlon XP(Barton核心)擁有512KB二級緩存。
使用Windows優化大師也可以正確設置CPU的二級緩存:啟動Windows優化大師,選擇「系統性能優化」,在「文件系統優化」中,最上面就是關於CPU二級緩存的設置項。拖動滑塊到相應的位置後,保存設置並重新啟動計算機即可。
『拾』 怎樣打開BIOS里邊的二級緩存
BIOS裡面的二級緩存?不是太明白你這個問題的意思 以前的老電腦確實有二級緩存設計在主板上的 但從奔騰2開始的機器大多數都已經將二級緩存配置在了CPU內部 在BIOS或者說CMOS設置裡面有一項是L2 CACHE 你將它設置為ENABLE就行了 一般來說默認都是打開狀態的 如果強行關閉的話系統性能會有不小的下降