Mysql引擎,gc觸發的條件,標籤

1.引擎

我知道的有ISAM MyISAN HEAP CSV InnoDB

比較常用到過的InnoDB和MyISAM
MyISAM:

該引擎基於ISAM數據庫引擎,除了提供ISAM裏面所沒有的索引和字段管理等大量功能,
MyIASAM還是使用一種表格鎖定機制來優化多個併發的讀寫操作
MYISAM:***只支持表級鎖,不支持行鎖***
1.用戶在操作MyISAM表時,select,update,delete,insert語句都會給表自動加鎖讀取時對需要讀到的所有表加鎖,寫入時則對錶加排它鎖(排他鎖:用於數據修改操作,例如 INSERT、UPDATE 或 DELETE。確保不會同時同一資源進行多重更新。如果事務T對數據A加上排他鎖後,則其他事務不能再對A加任任何類型的封鎖。獲准排他鎖的事務既能讀數據,又能修改數據。
我們在操作數據庫的時候,可能會由於併發問題而引起的數據的不一致性(數據衝突)。
2.不支持事務
3.不支持外鍵
4.不支持蹦潰後的安全恢復
5.在表有讀取查詢的同時,支持往表中插入新記錄
6.支持BLOB和Text的前500個字符索引,支持全文索引
7.支持延遲更新索引,極大地提升了寫入性能
8.對於不會進行修改的表,支持 壓縮表 極大地減少了磁盤空間的佔用

InnoDB

1.該存儲引擎爲MySQL表提供了ACID事務支持,系統崩潰修復能力和多版本併發控制(即MVCC  Multi-Version  Concurrency Control )的行級鎖;
2.該引擎支持自增長列,自增長列的值不能爲空,如果在使用的時候爲空則自動從現有開始增值,如果有但是比現在的還大,則直接保存這個值;
3.該引擎支持外鍵,外鍵所在的表成爲子表而所依賴的表稱爲父表。該引擎在5.5後的Mysql數據庫中爲默認存儲引擎。
**InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的where都會鎖全表**
4.**支持行鎖**,採用MVCC來支持高併發,有可能死鎖
5.支持事務
6.支持外鍵
7.支持崩潰後的安全恢復
8.不支持全文索引

表鎖與行鎖
計算機協調多個進程或線程併發訪問某一表或某行數據的機制。
表鎖:每次操作鎖住整張表。開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低;
行鎖:每次操作鎖住一行數據。開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度最高;

總結:
MyISAM更適合讀密集的表,而InnoDB更適合寫密集的的表。
在數據庫做主從分離的情況下,經常選擇MyISAM作爲主庫的存儲引擎。
如果需要事務支持,並且有較高的併發讀取頻率(MyISAM的表鎖的粒度太大,所以當該表寫併發量較高時,要等待的查詢就會很多了),這時選InnoDB是不錯的。
如果你的數據量很大(MyISAM支持壓縮特性可以減少磁盤的空間佔用),而且不需要支持事務時,MyISAM是最好的選擇。

————————————————
版權聲明:本文數據庫引擎爲CSDN博主「努力前行的小coder」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/FindHuni/article/details/95064138)

Java觸發gc的條件和時機
1.什麼時候觸發GC
程序調用System.gc時可以觸發,也不是立即 觸發,只是發了個通知要觸發,
Minor GC
    當Eden區中沒有足夠空間進行分配時,將會觸發一次Minor GC。
      1.調用System.gc()方法會建議JVM進行Major GC,因爲是建議並不一定會進行,但是大多數情況下還是會進行Major GC,強烈影響系建議能不使用此方法就別使用,讓虛擬機自己去管理它的內存,可通過通過-XX:+ DisableExplicitGC來禁止RMI調用System.gc。

2.老年代空間不足,JVM會進行Major GC,如果Major GC完後空間還是不足,就會拋出java.lang.OutOfMemoryError: Java heap space異常

3.方法區空間不足,JVM會進行Major GC,如果Major GC完後空間還是不足,就會拋出java.lang.OutOfMemoryError: PermGen space異常

4.java虛擬機中有擔保機制,當新生代的複製空間存儲不下存活對象時就會觸發擔保機制,會把剩下無法存儲的對象直接存放進老年代,如果此時老年代空間也無法存儲,就會擔保失敗,擔保失敗後JVM會進行Major GC

5.CMS進行GC的時候會產生浮動垃圾,浮動垃圾就是進行GC過程中產生的垃圾,佔用了空間,沒有被GC,導致空間不足,JVM虛擬機進行Major GC

6.分配的對象太大,這種對象會直接進入老年代,老年代的剩餘空間夠,但是連續空間不夠,此時JVM虛擬機進行Major GC
————————————————
版權聲明:本文爲CSDN博主「程序猿阿星」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m0_37199770/article/details/89713717

Mybatis的批量插入:

insert into table-name
(屬性值)
values

(#{},#{}…)

動態sql:if 相當於and choose爲 或

標籤
作用就是建立sql查詢結果字段與實體屬性的映射關係信息,查詢結果集轉爲java對象裏column是結果集的列名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章