entity manager未关闭造成的影响
spring jpa version:1.10.1
底层hibernate: 5.1.0
某些情况需要自行写sql,然后就用到了EntityManager, 用完之后没有显示的close(==|||)
上线后大量请求超时,偶尔有那么几个请求会快
首先确定不是数据库正在的查询慢,目前量还很小,然后找到sql去数据库查询系统确认,查询速度接近0ms
然后怀疑是网络延迟,然后找到接收到前端传递过来的参数,想让前端查查log他们发送的时间点,没人搭理…无果
找运维同学要了份error log,一看,果然不是网络问题,大量报获取不到数据库链接,等待获取连接超时,当时心一惊
想着用的spring jpa,底层使用的数据库链接应该会自动释放啊,找dba看了下应用系统连到数据库的活跃连接数,果然每个应用的连接数都到了最大值
想了想,有地方用了EntityManager,找到使用的地方一看,没有手动关闭,哎….
加上close后,问题解决…
没有任何技术含量,给自己的一个提醒,用惯了自动释放连接,以后得多注意
– The End –
一个表字段叫status,值是1,2,3,4,5,6,7,8,9
project manager想进行分类,然后某一类的排序规则是按照status 1,5,3,4 排序,相同状态的按时间排序
select demo_id,status,create_time from demo_table
where userId='123456' and status in (1,5,3,4)
order by field(status,1,5,3,4), demo_id desc
limit 0,30;
通过上篇文章,我们已经基本了解 标记列为未使用 (Marking Columns Unused)
了。
我们知道,在 SET UNUSED
后 其实数据并未真的被删除,若这时又想恢复该列,有办法吗?
接下来,我们来实验一下。
ALTER TABLE <table_name> SET UNUSED (<column_name>);
ALTER TABLE <table_name> DROP UNUSED COLUMNS CHECKPOINT <n>;
–
CHECKPOINT <n>
In the ALTER TABLE statement that follows, the optional clause CHECKPOINT is specified. This clause causes a checkpoint to be applied after processing the specified number of rows, in this case 250. Checkpointing cuts down on the amount of undo logs accumulated during the drop column operation to avoid a potential exhaustion of undo space.
ALTER TABLE hr.admin_emp DROP UNUSED COLUMNS CHECKPOINT 250;
参见官方文档:http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables.htm#ADMIN11662