自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(132)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring容器扩展及其他记录

1.上下文扩展 ApplicationContextAwareMap<String, XXXXTask> ywwlTaskMap = applicationContext.getBeansOfType( XXXXTask.class);xxxxTaskMap.forEach((x, y) -> { XXXXTaskName ywwlTaskName = y.getClass().getAnnotation( XXXXTaskName.class); //判断是否.

2021-02-04 17:57:34 148

原创 java线程池参数动态化方案

一、锁种类偏向锁因为经过HotSpot的作者大量的研究发现,大多数时候是不存在锁竞争的,常常是一个线程多次获得同一个锁,因此如果每次都要竞争锁会增大很多没有必要付出的代价,为了降低获取锁的代价,才引入的偏向锁。轻量级锁轻量级锁考虑的是竞争锁对象的线程不多,而且线程持有锁的时间也不长的情景。因为阻塞线程需要CPU从用户态转到内核态,代价较大,如果刚刚阻塞不久这个锁就被释放了,那这个代价就有点得不偿失了,因此这个时候就干脆不阻塞这个线程,让它自旋这等待锁释放。自旋锁减少线程上下文切换,提高执行效

2021-01-06 01:52:05 993

原创 threadlocal源代码阅读,及深度思考

ThreadlocalThreadlocal有什么用?提供线程的局部变量,每个线程有一份自己的一个副本变量,多个线程之间互相不干扰,一般我们会重写initialValue方法来重新赋值什么时候线程第一次给赋值?每个线程第一次访问get的时候,就是他使用 initialValue方法分配数据Threadlocal- Jdk1.8以后每个线程对应的Thread对象内部都有一个(Threadlocals字段- ThreadLocal.ThreadLocalMap threadLocals

2020-11-27 21:23:24 203

原创 AtomicInteger源代码分析

原理AtomicInteger的本质:自旋锁+CAS原子操作源代码:初始化使用Unsafe类,定义偏移量valueOffset,类加载就初始化。用于原子操作CAS。本质Valatile私有,并且用volatile修饰Jdk1.7和1.8实现不一样Jdk1.7及以前1.获取volatitle修饰的变量,最新的主存值2.value+1作为自增值3. compare value是否就是主存值,是,set ne...

2020-11-13 22:07:11 134

原创 某团的分布式唯一id获取方案,研读心得

地址:https://www.toutiao.com/i6682672464708764174总结:加一张表,用业务类型做查询字段,每个业务是自增保存为一条数据,如果出现多个同时请求的时候,用数据库的begin-end行锁拦住,如果阻塞问题的话,开辟2个内存空间1、传统的数据库方式存在问题一旦步长定下来,不容易扩容数据库压力山大数据库压力大,为什么压力大?是因为我们每次获取ID的时候,都要去数据库请求一次。那我们可不可以不要每次去取?思路是我们请求数据库得到ID的时候,可设..

2020-07-18 17:50:20 187

原创 GitHub看不了图片如何解决,亲测有效

修改hostsC:\Windows\System32\drivers\etc\hosts添加一下内容# GitHub Start192.30.253.112 Build software better, together192.30.253.119 gist.github.com151.101.184.133 assets-cdn.github.com151.101.184.133 raw.githubusercontent.com151.101.1...

2020-06-25 03:39:11 384

原创 idea取不到resources下的文件,情况处理~

配置:<build> <resources> <resource> <directory>src/resources</directory> <excludes> <exclude>*/*.pr...

2019-04-26 11:28:25 3837 1

原创 wm_concat函数的排序问题

准备数据:create table test(n varchar2(20),m varchar(20) );  insert into test values ('0',  '1'); insert into test values ('1',  '1'); insert into test values ('10', '1'); insert into test values ...

2018-08-19 23:48:21 2187

原创 Oracle之pivot函数

测试数据:CREATE     TABLE T     (         OWNER VARCHAR2(30),         OBJECT_TYPE VARCHAR2(100),         VALUE NUMBER     );insert into t  select object_name,object_type,object_id from user_objects ;commi...

2018-03-20 01:55:45 5683

原创 Oracle之在线重定义功能

在Oracle9i出现之前,你只能通过MOVE或导出和导入的方式来进行表的重定义,因此表重定义的过程可能相当漫长或者说是一个离线过程,在此期间应用程序对该表的操作将失败。除了这个,如果用exp,我们也不能保证exp的时候该表的数据没有改变(除非单用户),而imp更是一个漫长的过程。 为了解决这个问题,Oracle9i在其DBMS_REDEFINITION软件包中引入了在线重定义功能。这个特性对24

2017-11-19 23:07:19 868

转载 Oracle之高水位(HWM:high water mark)

解析:查询block块数量一直差距1,可能是oracle后期对内存结构进行了调整,因为有一个数据库块被保留用作segment header,在oracle升级后不再被保留 Oracle表段中的高水位线HWM      在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的水。水库中的水的位置有一条线叫做水位线,在Oracle中,这条线被称为高水位线(Hig

2017-11-09 00:11:04 361

原创 Oracle之分区表

解析:分区表的这种update跟一般的update机制上也不一样了(这个你清楚),因此回滚肯定也是不一样的。oracle的回滚是记录块修改前的映像,而不是一个逻辑操作。因此,分区表的update涉及到多个块的修改,理论上应该会产生更多的回滚。1.      一般用于分区表,将row movement设置为enable,有可能发生行的物理移动,行的rowdi会变化,某一行更新时,如果

2017-11-07 01:12:13 241

转载 Oracle之DBMS_STATS.GATHER_TABLE_STATS详解

摘要: 由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要! 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,包含该表的自身-表的行数、数据块数、行长等信息;列的分析--列值的重复数、列上的空值、数据在列上的分布情况;索引的分析-索引页块的数量、索引的深度、索引聚合因子).由于Or

2017-11-07 00:38:50 5799

原创 Oracle之block能装多少行?以及dbms_rowid包讲解

语法:DDMS_ROWID包基本语法DBMS_ROWID包允许我们使用PL/SQL程序或SQL语句创建rowids和获取rowid的信息。例如可以通过其找到数据对象编号,数据文件编号,包含数据行的数据块编号及数据块中的数据行。该包从Oracle 8.X开始可用。DBMS_ROWID的几个子函数程序:1、ROWID_BLOCK_NUMBER函数(该函数返回输入RO

2017-11-06 23:54:31 755

原创 Oracle之索引、位图索引、物化视图、缓存结果集等性能比拼

--最慢速度(无索引)drop table t purge;create table t as  select * from dba_objects;alter table T modify OBJECT_NAME not null;select count(*) from t;set autotrace traceonlyset linesize 1000set ti

2017-11-06 00:50:28 861

原创 Oracle之索引耗费性能

set linesize 266drop table t purge;create table t as select * from dba_objects;select t1.name, t1.STATISTIC#, t2.VALUE  from v$statname t1, v$mystat t2 where t1.STATISTIC# = t2.STATISTIC

2017-11-06 00:46:27 450

原创 Oracle之分区表和普通表的查询执行计划对比

总结:通过执行计划查看,分区表查询效率明显优于普通表。--范围分区示例drop table range_part_tab purge;--注意,此分区为范围分区create table range_part_tab (id number,deal_date date,area_code number,contents varchar2(4000))           part

2017-11-05 22:55:31 570

原创 Oracle之分析函数例子 - 高频数获取

drop table emp purge;CREATE TABLE emp(  emp_id    NUMBER(6),  ename  VARCHAR2(45),  dept_id   NUMBER(4),  hire_date DATE,  sal    NUMBER(8,2));--创建emp数据INSERT INTO emp (emp

2017-11-05 16:50:12 243

原创 Oracle之分析函数 - 各种分析函数例子

/*函数应用主要分为如下4类: 1 统计函数(MAX MIN AVG SUM COUNT等) 2.排序函数(ROW_NUMBER RANK DENSE_RNAK FIRST FIRST_VALUE LAST LAST_VALUE LAG LEAD 等) 3.数据分布函数(NTILE CUME_DIST PERCENT_RANK  PERCENTILE_CON  PERCENTI

2017-11-05 16:40:50 1615

原创 Oracle之分析函数应用- 连续值判断

drop table t purge;create table t (id1 int,id2 int ,id3 int);insert into t (id1 ,id2,id3) values (1,45,89);insert into t (id1 ,id2,id3) values (2,45,89);insert into t (id1 ,id2,id3) values (3,

2017-11-05 16:38:14 1347

原创 Oracle之分析函数 去重 应用

DROP TABLE t purge ;CREATE TABLE t AS SELECT * FROM dba_objects WHERE rownumUPDATE t SET object_id=rownum;UPDATE t SET object_id=3 WHERE object_idUPDATE t SET object_id=4 WHERE object_id>=4 AN

2017-11-05 16:36:49 1137

原创 Oracle之分析函数 之 order by子句

/*有ORDER BY的存在将添加一个默认的开窗子句!意味着从第一行到当前行;没有ORDER BY时,默认的窗口是全部的分区 ;在Order by 子句后可以添加nulls last,如:order by comm desc nulls last   表示排序时忽略comm列为空的行.    不写between AND  ,在有order BY 的情况下,就是分组第一行

2017-11-05 16:13:45 1115

原创 Oracl之开窗函数 - Range

/*1. RANGE窗口仅对NUMBERS和DATES起作用,因为不可能从VARCHAR2中增加或减去N个单元2. 在RANGE的开窗中,ORDER BY中只能有一列;ROWS的开窗的ORDER BY 可以有多列。 */Rich table emp purge;CREATE TABLE emp(  emp_id    NU

2017-11-05 15:41:12 2803 1

原创 Oracle之开窗函数 - 详解 AND Rows

解析:三个位置:最前边一行,最后边一行,当前行位置永远是自上而下的drop table emp purge;CREATE TABLE emp(  emp_id    NUMBER(6),  ename  VARCHAR2(45),  dept_id   NUMBER(4),  hire_date DATE,  sal    NUMBER(8,

2017-11-05 02:39:26 2708

原创 Oracle之分区和优化总结

Oracle分区类型:Oracle10只有 Range 、 List  11g:Range、List、HashList-List List-Range List-HashRange-Range Range-List Range-Hashrange:范围分区、 List:列值分区 hash:哈希分区优化:1.当查询时候,通过执行计划可以观察扫描分区个数,经常会遇到

2017-11-02 01:45:00 536

原创 Oracle之merge经典案例

--MERGE的巧妙运用/* 案例1:需求为:将如下t记录的ID=1的NAME改为ID=2的NAME的值,把ID=2的NAME改为ID=1的NAME的值。*/drop table t;create table t (id number,name varchar2(20));insert into t values (1,'a');insert into t va

2017-10-29 15:45:46 402

原创 Oracle之merge妙用,两值相互交叉更新

--构造环境DROP TABLE T1;CREATE TABLE T1 (NAME VARCHAR2(20),MONEY NUMBER);INSERT INTO T1 VALUES ('A',10);INSERT INTO T1 VALUES ('B',20);DROP TABLE T2;CREATE TABLE T2 (NAME VARCHAR2(20),MONEY NU

2017-10-29 15:37:54 656

原创 Oracle之merge误区讨论

---merge五大误区---构造数据,请注意这里多插入一条A记录,就产生了ORA-30926错误DROP TABLE T1;CREATE TABLE T1 (NAME VARCHAR2(20),MONEY NUMBER);INSERT INTO T1 VALUES ('A',10);INSERT INTO T1 VALUES ('B',20);DROP TABLE T

2017-10-29 15:16:56 1376

原创 Oracle之查询对应索引的情况

SET LINESIZE 666set pagesize 5000column index_name format a30column table_name format a26column num_rows format 999999999column index_type format a24column num_rows format 999999999colum

2017-10-27 22:01:55 1515

原创 Oracle之获取SQL对应表的信息

SET LINESIZE 666set pagesize 5000column index_name format a30column table_name format a26column num_rows format 999999999column index_type format a24column num_rows format 999999999colum

2017-10-27 22:01:11 209

原创 Oracle之一键获取数据库总体情况 awr等报表

SET markup html ON spool ON pre off entmap offset term offset heading onset verify offset feedback offset linesize 2000set pagesize 30000set long 999999999set longchunksize 999

2017-10-27 18:48:51 306

原创 Oracle之关于outline (锁定执行计划)

一、基本概述Oracle Outline,中文也称为存储大纲,是最早的基于提示来控制SQL执行计划的机制,也是9i以及之前版本唯一可以用来稳定和控制SQL执行计划的工具。outline是一个hints(提示)的集合,更具体的讲,outline可以锁定一个给定SQL的执行计划,保持其执行计划稳定,不管数据库环境如何变更(如统计信息,部分参数等)注意:从10g以

2017-10-27 00:22:43 1503 1

原创 Oracle之索引组织表

假设表A,有5个字段,其中有一个名为ID的字段为主键。日常业务中,经常需要根据ID字段的值,查找该表上其它字段(一个或多个字段,甚至全部字段)上的值。如果我们只在ID列上创建索引,当执行select id,字段2,字段3,...from 表Awhere id=(>,=,时,如果结果集是少数记录,那么极可能是通过ID列上的索引获取ROWID,然后回表去读取相应ROWID的行记录,以获

2017-10-27 00:06:37 701

转载 执行计划SQL写法差异改变之insert all

/*  性能上来看,insert all不一定会有优势,但是如果分开写和合并写不等价的时候,分开写要很麻烦,比如锁表,  比如中间表,这样性能就要比insert all差多了!  insert all 的执行计划有其关键字:MULTI-TABLE INSERT */      drop table t1 purge;create table t1 as select

2017-10-26 22:18:26 465

原创 Oracle之hint研究查询生效范围

/*  简单的SQL语句只有一个单独的查询块。当使用视图或类似子查询、内联视图、集合操作符等结构时,就会  出现多个查询块(比如本次的例子的查询就有两个查询块,第一个是引用了dept表的主查询,第二个是引用了emp表的子查询)。  之前我们总结了hint的分类,除了第一类初始化参数hint外,所有其他的hint都是仅针对单个查询块起作用。  本例就是描述如何让各个模块的HINT生效

2017-10-26 21:40:47 419

原创 Oracle之hints分类

/*  所有的hint,都可以从如下视图中获取到(11g)。  select * from v$sql_hint;其中该视图的name和inverse是相反的hint,比较有意义。  其中有些变化,比如parallel的hint变成shared,在实际使用中,是一样的。  */   --1.初始化参数hint(可以覆盖在系统级或会话定义的部分的初始化参数

2017-10-26 20:30:07 473

原创 Oracle之一条SQL对应多个执行计划

解析:同一个表名对应不同的用户,对用不同的表结构,就会产生一条SQL产生多个执行计划。等分结论4(一条SQL对应多个执行计划):一. 关于获取执行计划的6种方法和各自区别大家在上一例子中已经大致明白了。    1. explain plan for获取;     2. set autotrace on ;        3. statistics_level=a

2017-10-26 14:20:21 3340

原创 Oracle之获取真正的执行计划

/*分结论3(执行计划,你是真实的吗):一.关于获取执行计划的6种方法和各自区别大家在上一例子中已经大致明白了。    1. explain plan for获取;     2. set autotrace on ;        3. statistics_level=all;    4. 通过dbms_xplan.display_cursor输入sql_

2017-10-26 14:01:10 640

原创 Oracle获取执行计划的6中方式,以及每种方式的优缺点

/*  总的结论:    一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了):    1. explain plan for获取;     2. set autotrace on ;        3. statistics_level=all;    4. 通过dbms_xplan.display_cursor输入sql_id参数直接获取 

2017-10-26 13:56:57 741

原创 Oracle执行计划之动态采样

/*  结论:  1. 统计信息默认情况下是每天晚上10点半后收集,如果新建对象还没来得级收集统计信息,就采用动态采样的方式。  2. 具体在set autotrace 跟踪的执行计划中,可以看到类似:- dynamic sampling used for this statement (level=2)  3. 除非你用类似/*+dynamic_sampling(t 0) */的

2017-10-26 11:55:49 934

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除