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是结果集的列名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值