update

【Spring错误笔记】spring.jpa.hibernate.ddl-auto=update造成删除索引的线上事故

廉价感情. 提交于 2020-01-14 12:24:37
spring.jpa.hibernate.ddl-auto=update造成删除索引的线上事故 事故背景 技术习惯 业务背景 事故回放 事故起因 事故起因 为什么Hibernate会执行删除索引再重建索引的操作? 事故结论 事故原因 事故结论 事故背景 技术习惯 公司技术习惯,无论是线上环境,还是预线上,测试环境,都习惯使用 Spring Data Jpa 作为ORM工具 为了快速迭代,通常对于表的更新的DDL语句,都依赖JPA的自动更新机制,包括线上环境,即使用 spring.jpa.hibernate.ddl-auto=update 配置 业务背景 重构项目,需要迁移数据,进行合库 重构项目的部分接口 QPS 峰值为5k级别 ,日查询流量上亿 重构项目涉及数据库,多个单表数据达百万,部分单表数据为千万级 区别于旧服务,新建一个新的服务,迁移接口,沿用旧数据库 事故回放 第一波 重构服务,新服务准备0流量上线,线上环境配置为 spring.jpa.hibernate.ddl-auto=update ,数据库实体映射关系未修改 服务上线之后,旧服务高QPS接口出现抖动,接口可用率下滑,延迟攀升,出现服务告警。 简单查询后,发现是数据库使用率超百分百, 正常情况下CPU使用率为百分之10左右 相关人员排查问题,没有发现具体原因,后续没有发现原因,一段时间后,服务可用率自行恢复

plsql手动修改数据

核能气质少年 提交于 2020-01-14 09:04:11
在plsql中,除了写update,还可以手动修改数据 1.在所写的sql语句后加入:for update 2.点击execute(F8),黄色齿轮按钮,执行一下 3.点击解锁(edit data),编辑修改内容,如图。 (ps:编辑时可以在单元格右键-open in editor,用编辑器编辑) 4.内容修改完成后,点击绿色勾(post changes) 5.底下会出现:一条记录被更新 6.接下来把数据库锁上,一定记得加锁。点击步骤3的(edit data)按钮 7.然后点击一次commit按钮,如图所示。 8.可以再在数据库中查询一次,看数据是否有更新(注释掉for update) (ps:如果修改不成功,看一下是不是在多个表上修改的问题) ps:以下括号内容摘自:PLSQL中 commit 和 rollback 的区别 (commit即提交,表示这个事务的所有操作都执行成功,commit告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都要确保不因数据库的宕机而丢失。 DDL是隐性提交的,不能回滚。而最常用的DML语言(update,delete,insert)是需要进行显示提交的,也就是说需要手动地去commit。) 来源: CSDN 作者: qq_34412985 链接: https://blog.csdn.net/qq_34412985/article

fatal:不是一个git仓库

元气小坏坏 提交于 2020-01-14 08:52:49
问题:git submodule update 提示:fatal:不是一个git仓库 如图: 解决方案: 输入:git init 再输入git submodule update 就可以了 来源: CSDN 作者: nownow_ 链接: https://blog.csdn.net/nownow_/article/details/103873579

Angular6.0发布

谁说胖子不能爱 提交于 2020-01-14 05:30:36
Angular v6 新版本重点关注工具链以及工具链在 Angular 中的运行速度问题。 Angular v6 是统一整体框架、Material 和 CLI 三大 Angular 组件的第一个版本,此次更新更多地关注于工具链上,以使其具有更好的可移植性。 此次更新信息如下: 更新依赖关系: @angular/core 现在依赖于: TypeScript 2.7 RxJS 6.0.0 tslib 1.9.0 @angular/platform-server 现在依赖于 Domino 2.0 特性的小改动: animations: 只能使用 WA-polyfill 和 AnimationBuilder animations: 在转换匹配器中暴露元素和参数 common: 在 NgIf 中使用非模板元素时更好的错误消息 common: 导出函数来格式化数字,百分数,货币和日期 compiler: 实现“enableIvy”编译选项 core: 添加绑定名称到内容更改错误 bug 修复: 即使在 noOp 动画期间也要报告正确的 totalTime 值 避免在路由器返回/刷新期间插入动画 修复增加/减少别名示例 修正 Observable 方法的映射 更新功能信息: 1. ng update ng update <package> 是一个新的 CLI 命令,用于分析 package

时间戳,这样用就对了

﹥>﹥吖頭↗ 提交于 2020-01-14 02:27:55
前言: 时间戳字段在MySQL中经常使用到,比如需要记录一行数据创建的时间或修改的时间时,我们通常会使用时间戳即timestamp字段。本篇文章主要介绍timestamp字段的使用方法及相关参数,希望大家读完能对timestamp有更深的认识。 1.TIMESTAMP字段类型简介 timestamp字段类型可存储时间类型数据,timestamp所能存储的时间范围为:'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999',timestamp字段占用4个字节。在MySQL5.7版本,timestamp可以指定精度,即TIMESTAMP(fsp)中fsp可以指定一个介于0到6之间的可选值,以代表小数秒精度。值为0表示没有小数部分,如果省略,则默认精度为0。 下面我们来简单测试下: # timestamp可以指定精度 mysql> CREATE TABLE `stu_tb` ( -> `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', -> `stu_id` int(11) NOT NULL COMMENT '学号', -> `stu_name` varchar(20) DEFAULT NULL COMMENT '学生姓名', -> `create_time`

Hibernate,JPA注解@Version

给你一囗甜甜゛ 提交于 2020-01-14 00:14:01
Hibernate实现悲观锁和乐观锁。 1,悲观锁 用例代码如下: 数据库DDL语句: hibernate.cfg.xml java类 以上代码(除下面的main之外)同乐观锁。 main 1 package a3_Version; 2 import org.hibernate.LockOptions; 3 import org.hibernate.Session; 4 import daoUtil.HibernateUtil; 5 6 public class Test_pessiLock { 7 8 public static void main(String[] args) { 9 Session session = HibernateUtil.getSession(); 10 11 try { 12 Cat cat = (Cat)session.get(Cat.class, "8a6cc5a34c54de57014c54de588e0000", LockOptions.UPGRADE); 13 14 System.out.println("这行设置断点,到数据库"); 15 System.out.println("使用SQL:select * from CAT t WHERE T.ID='"+cat.getId()+"' FOR UPDATE"); 16 System

timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP

早过忘川 提交于 2020-01-14 00:08:44
timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下: 1. CURRENT_TIMESTAMP 当要向 数据库 执行insert操作时,如果有个timestamp字段属性设为 CURRENT_TIMESTAMP,则无论这个字段有没有set值都插入当前系统时间 2. ON UPDATE CURRENT_TIMESTAMP 当执行update操作是,并且字段有ON UPDATE CURRENT_TIMESTAMP属性。则字段无论值有没有变化,它的值也会跟着更新为当前UPDATE操作时的时间。 以上内容: 原文 更详细可以参考: MySQL的timestamp类型自动更新问题 来源: https://www.cnblogs.com/wkrbky/p/6133727.html

数据库锁

风流意气都作罢 提交于 2020-01-13 22:01:56
1 前言 数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2 为另一个线程。T3,T4以此类推。下面以SQL Server(2005)为例。 2 锁的种类 共享锁(Shared lock)。 例1: ---------------------------------------- T1: select * from table (请想象它需要执行1个小时之久,后面的sql语句请都这么想象) T2: update table set column1='hello' 过程: T1运行 (加共享锁) T2运行 If T1 还没执行完 T2等...... else 锁被释放 T2执行 endif T2之所以要等,是因为T2在执行update前,试图对table表加一个排他锁, 而数据库规定同一资源上不能同时共存共享锁和排他锁。所以T2必须等T1 执行完,释放了共享锁,才能加上排他锁,然后才能开始执行update语句。 例2: ---------------------------------------- T1: select * from table T2: select * from table 这里T2不用等待T1执行完

msql 表insert select update delete (三)

对着背影说爱祢 提交于 2020-01-13 21:58:26
1.插入数据 insert into 表名 values("字段1“,字段2.) mysql> insert into classes values(null,"WuLiu",98); Query OK, 1 row affected (0.01 sec) 多行插入 mysql> insert into classes values(3,"GuanLi",22),(4,"KuaiJi",55); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> desc classes; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(10) | YES | | NULL | | | num | int(11) |

更新PostgreSQL数据

我们两清 提交于 2020-01-13 19:37:40
修改已经存储在 数据库 中的数据的行为叫做更新。你可以更新单独的一行,也可以更新表中所有的行,还可以更新其中的一部分行。我们可以独立地更新每个字段,而其它的字段则不受影响。 要更新现有的行,使用 UPDATE 命令。这需要三种信息: 表的名字和要更新的字段名 字段的新值 要更新哪些行 SQL 通常并不为数据行提供唯一标识。因此我们无法直接声明需要更新哪一行。但是,我们可以通过声明一个被更新的行必须满足的条件。只有在表里存在主键的时候 (不依赖于你是否声明它),我们才能通过选取匹配主键的条件可靠地指定一个独立的行。图形化的数据库访问工具依赖上述方法来让我们可以独立地更新某些行。 比如,这条命令将所有价格为 5 的产品重定价为 10 : UPDATE products SET price = 10 WHERE price = 5; 这样做可能导致零行、一行或多行数据被更新。如果我们试图执行一个不匹配任何行的更新,那也不算错。 让我们仔细看看这个命令。首先是关键字 UPDATE 后面紧跟着表名。和平常一样,表名也可以是用模式修饰的,否则就会从模式路径中把它找出来。然后是关键字 SET 跟着字段名与一个等号以及新的字段值。新的字段值可以是任意标量表达式,而不仅仅是常量。比如,如果你想把所有产品的价格提高 10% ,可以用: UPDATE products SET price = price