有用教程收藏


一java

1.1 spring security
http://silentwu.iteye.com/blog/2214324 《Spring security 访问权限控制 》


1.2 spring boot
                 1 使用springboot控制spring security 实现权限访问
http://blog.csdn.net/u012702547/article/details/54319508 《在Spring Boot中使用Spring Security实现权限控制 》

二 mysql
2.1 优化方面
http://www.techweb.com.cn/network/system/2017-06-24/2545498.shtml 《Linux上MYSQL优化的三板斧》

CPU方面:

关闭电源保护模式

内存:

vm.swappiness = 0

关闭numa

文件系统:

用noatime,nobarrier挂载系统

IO调度策略修改为deadline。

http://blog.csdn.net/john_chang11/article/details/52400080 csdn mysql诊断问题列表


2.2 基础

1 http://blog.itpub.net/28602568/viewspace-1797619/ socket 文件作用
socket仅用于在本机使用localhost登陆系统时,使用socket方式登陆。
mysql登陆方式有两种,一种是tcpip,一种是socket方式

2 http://www.cnblogs.com/cchust/p/3914935.html mysql自增列导致主键重复问题分析
 【MySQL】replace into 浅析之一

3 mysql远程导入导出方法
 远程导出数据到本地的用法
C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqldump -uroot -p dwsurvey policy_
          keywords_rel -h 127.0.0.1 > d:dochu.sql
          Enter password: ******
把本地数据导出到远程数据库
C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql -uroot -p -h127.0.0.1 diaowen<
          d:dochu.sql
          Enter password: ******
可参考网址
http://www.cnblogs.com/chenmh/p/5300370.html MySQL mysqldump数据导出详解
http://blog.itpub.net/15480802/viewspace-700454/ mysqldump导入导出表数据

4 死锁实验
MySQL死锁的两个小案例 http://blog.itpub.net/23718752/viewspace-2144727/

5 官网
https://dev.mysql.com/doc/refman/5.7/en/mysql-innodb-cluster-introduction.html

6 安装
http://blog.csdn.net/superchanon/article/details/8546254 Linux安装MySQL的两种方法
 可以搞明白 mysql安装分两种方式 源码安装和二进制安装
 源码安装 对应官网网页里的选择方式 是选择通用安装且source类型
 二进制安装 1 tar.gz形式安装 对应通用linux类型
            2 包安装 对应具体linux类型 不是通用generic

    
2.3 架构
2.3.1 MHA
          MHA终极详解 http://blog.itpub.net/15480802/viewspace-1402945/

2.3.2 主从
Mysql GTID 模式详解 http://blog.csdn.net/wmq880204/article/details/53160078
快速搭建主从的脚本和问题排查 http://blog.itpub.net/23718752/viewspace-2144422/ 自动脚本搭建主从

2.3.3 MySQL Group Replication
        1 MySQL Group Replication 介绍 http://blog.csdn.net/d6619309/article/details/53691352
个人的小项目mysql_mgr_test开放了 http://blog.itpub.net/23718752/viewspace-2144349/

2.4 分库分表
Mycat分库分表的简单实践 http://blog.itpub.net/23718752/viewspace-2144552/

2.5 监控
1 一个慢查询报警的简单处理 http://blog.itpub.net/23718752/viewspace-1990312/
        log_queries_not_using_indexes = ON 这个参数开着的话说明没有使用索引的sql即便是没有性能
 问题的sql也记录到慢查询日志里

2.6 自动扩容问题
 《MySQL数据库TDSQL架构分析及采用策略扩容流程》 http://blog.csdn.net/linuxheik/article/details/52819460
有2种比较成熟的扩容策略
 策略1先切后搬:先修改路由,将需要迁走的数据的请求直接发送到新set,在新set交易过程中如发现本地的数据不存在,则去原set拉取数据,
 然后再通过一些离线的策略将要迁移的数据全量再搬迁一次,HOID平台就是采用这样的策略。

策略2先搬后切:让请求继续在原set交易,扩容程序首先记录一个binlog位置点,并将源set中符合迁移条件的数据全部迁移出去,
 最后再将搬迁过程中新增的binlog追完,最后修改路由规则,将请求发送到新set。
 策略2会有更大的通用性,具体方式
 用mysqldump导出镜像的时候会有一个binlog位置,从mysqldump记录的binlog位置开始读取binlog并插入到到Set4,
 追到所有binlog文件末尾的时候(这需要一个循环,每次循环记录从开始追binlog截止到追到文件结尾消耗的时间,
 必须保证追单次循环要在几秒之内完成,避免遗留的binlog太多导致最后一次追binlog消耗太多的时间,从而影响业务过久),
 对原来的表t_shard_1重命名t_shard_5,此时针对这个表不会再有新请求,若还有请求过来都会失败,然后再追一次binlog到文件结尾
 (因为上面的循环保证了追binlog不会太耗时间了,所以此次会快速完成),然后上报状态到ZooKeeper,表明扩容任务完成。
Scheduler收到扩容完成的信息之后会修改路由表,最后由网关拉取到新路由完成整体的扩容;从表重命名开始到网关拉取到新路由,
 这段时间这个原始shard不可用,从我们测试结果来看这个不可用的时间是200毫秒左右
 
三 ORACLE
http://blog.itpub.net/500314/viewspace-1063654/ Oracle 11g 新特性简介
3.1 数据库设计
 权限管理系统
 
 
 审批管理系统设计老系统
 审批管理系统设计优化系统
  业务表  大分类   小分类   模块ID  申请 ID  申请表    申请id  审批路径  审批路径表     角色表 
 资产  大分类1  小分类 1 MD1 ID1   id1      id1  path1     pid1 人1,人2
   大分类2  小分类 2 MD2 ID2   id2      id2  path2     pid2 人1,人3
            
            
            
大小分类code表         1 根据code表 大小分类code和moduleid显示查询页面  
            2 建立审批路径包括里面的角色数据  
            3 从业务表中找出对应大小分类和moduleid的申请id  
            4 在申请表里设置对应审批路径  

3.2 dataguard
 1 http://blog.csdn.net/u013169075/article/details/73555522 Oracle 11g DG概念与进程详解
 自动裂缝检测和解决
 缺失的这些日志就是裂缝(Gap)。Data Guard能够自动检测,这需要配置FAL_CLIENT,FAL_SERVER 这两个参数(FAL: Fetch Archive Log)。
 从FAL 这个名字可以看出,这个过程是Standby Database主动发起的“取”日志的过程,Standby Database 就是FAL_CLIENT.
 它是从FAL_SERVER中取这些Gap, 10g中,这个FAL_SERVER可以是Primary Database, 也可以是其他的Standby Database。
 如:FAL_SERVER='PR1,ST1,ST2';
     FAL_CLIENT和FAL_SERVER两个参数都是Oracle Net Name。FAL_CLIENT 通过网络向FAL_SERVER发送请求,
     FAL_SERVER通过网络向FAL_CLIENT发送缺失的日志。 但是这两个连接不一定是一个连接。 因此FAL_CLIENT向FAL_SERVER发送请求时,
     会携带FAL_CLIENT参数值,用来告诉FAL_SERVER应该向哪里发送缺少的日志。 这个参数值也是一个Oracle Net Name,
     这个Name是在FAL_SERVER上定义的,用来指向FAL_CLIENT.
   
 2  Oracle和MySQL的高可用方案对比(二) 
http://blog.itpub.net/23718752/viewspace-2146963/

3.2.1 dg broker
http://ylw6006.blog.51cto.com/470441/686900/ Data Guard Broker配置与主备库切换指南
http://blog.itpub.net/30590361/viewspace-2135721/ oracle11g单节点DGbroker搭建 写的很完整包括手工搭建和broker搭建
主要关注点
1 listener.ora 添加一个静态注册的service_name为db_unique_name_DGMGRL
2 初始化参数和密码文件 FAL_SERVER,db_file_name_convert,db_unique_name 保证他们在主备库上的顺序不一样
3 主备库的验证
主库检查归档目录是否有误
SQL> select error from v$archive_dest where error is not null
备库 查看standby管理情况
select process,pid,status from v$managed_standby;  备库 ARCH、MRPO和RFS都有表示正常
select process,pid,status from v$managed_standby;  主库 没有RFS进程和MRP进程,有LNS进程
4 查看主备库上转换状态
 select database_role,switchover_status,open_mode from v$database
 当时 NOT ALLOW 时 使用切换命令 查看是否需要恢复 alter database commit to switchover to primary; 参考 https://www.linuxidc.com/Linux/2014-04/100795.htm
 
3.2.2 dg问题诊断
 近期处理的Oracle数据库问题总结 http://blog.itpub.net/23718752/viewspace-2148058/
问题2:备库无法同步数据
DG Broker就是一款神器,主备库几乎不需要做什么额外的配置,就可以很轻松的创建配置,结果不到10分钟,配置的时候,
 发现问题的原因就是备库的db_unique_name和主库是一样的,所以导致无法同步问题
 问题3:主库添加数据文件后,备库MRP退出。
STANDBY_FILE_MANAGEMENT=MANUAL造成不会自动管理数据文件,比如主库增加了数据文件,备库不会自动增加,若设置为AUTO即可实现自动管理
 问题3 参考 http://blog.csdn.net/surperping/article/details/7902267 Data Gurd因参数Standby_file_management=MANUAL导致日志无法应用

问题4:备库数据无法同步。
 这个问题和问题2是一样的效果,但是问题的原因却有很大的差别。这个问题的愿意就在于闪回区的设置,即归档文件无法正常创建,不是系统层面的空间不足,而是闪回区的大小不足。

3.3 基础
http://www.cnblogs.com/jyzhao/p/5001782.html#3 Oracle 11g静默安装简明版

3.4 ORACLE故障诊断
1 http://blog.itpub.net/23718752/viewspace-1062999/ oracle坏块修复实例
 修复坏块从日志中看问题 alert.log
根据日期提示到trace里找详细报错信息。可以看到具体哪个文件,哪个块错,同时有报错的sql
可以根据执行的sql找出坏块所属类型,是表还是索引,如果是索引可以重建,表上的坏快不能重建就略过重新导入。
 然后用DBMS_REPAIR.FIX_CORRUPT_BLOCKS 先修复块,修复块不一定能修复
 所以还要调用 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS  略过块
2 http://www.sohu.com/a/204390219_505827 基于裸数据的异地数据库性能诊断与优化
 给出了sql的实例,思路方法都很好
3 多个客户端不能访问页面,报日期格式错误,有的客户端确没事,开始以为和os的字符集有关,后来发现用客户端工具有的也报错
突然想起和环境变量有关,最后设置nls_language_date 解决
4 登录oracle登录不上,以为密码设置的简单,后来发现密码里有' 这种转义字符,需要转义才能登陆
5 客户端工具不能正常显示韩文,于是需要设置环境变量,在里增加nls_lang 解决显示韩文问题

6 http://www.sohu.com/a/232540391_505827 罗海雄:仅仅使用AWR做报告? 性能优化还未入门
这是一个常用的AWR裸数据的列表
DBA_HIST_SYSSTAT 系统计数
DBA_HIST_SYSTEM_EVENT 等待事件
DBA_HIST_SQLSTAT/SQLTEXT SQL信息
DBA_HIST_SQLPLAN 执行计划
DBA_HIST_SEG_STAT/STAT_OBJ对象信息
DBA_HIST_ACTIVE_SESS_HISTORY 活动会话信息

得到多个指标排序
select sql.*, (select SQL_TEXT from dba_hist_sqltext t

    where t.sql_id = sql.sql_id and rownum=1 ) SQLTEXT

from (
 select a.* ,

 RANK() over( order by els desc) as r_els,

 RANK() over( order by phy desc) as r_phy,

 RANK() over( order by get desc) as r_get,

 RANK() over( order by exe desc) as r_exe,

 RANK() over( order by CPU desc) as r_cpu

 from (

  select sql_id,sum(executions_delta) exe,round(sum(elapsed_time_delta) / 1e6, 2) els

  ,round(sum(cpu_time_delta) / 1e6, 2) cpu,

  round(sum(iowait_delta) / 1e6, 2) iow,sum(buffer_gets_delta) get,

  sum(disk_reads_delta) phy,sum(rows_processed_delta) RWO,

  round(sum(elapsed_time_delta) / greatest(sum(executions_delta), 1) / 1e6,4) elsp,

  round(sum(cpu_time_delta) / greatest(sum(executions_delta), 1) / 1e6, 4) cpup,

  round(sum(iowait_delta) / greatest(sum(executions_delta), 1) / 1e6, 4) iowp,

  round(sum(buffer_gets_delta) / greatest(sum(executions_delta), 1), 2) getp,

  round(sum(disk_reads_delta) / greatest(sum(executions_delta), 1), 2) phyp,

  round(sum(rows_processed_delta) / greatest(sum(executions_delta), 1), 2) ROWP

  from dba_hist_sqlstat s

  --where snap_id between ... and ...

  group by sql_id ) a

)SQL where r_els <= 10 or r_phy <=10 or r_cpu<=10 order by els desc


取出不同时间段的历史绑定变量值
select * from ( select snap_id, to_char(sn.begin_interval_time,'MM/DD-HH24:MI') snap_time, sq.sql_id,bm.position, dbms_sqltune.extract_bind(bind_data,bm.position).value_string value_string from dba_hist_snapshot sn natural join dba_hist_sqlstat sq ,dba_hist_sql_bind_metadata bm
where sq.sql_id = bm.sql_id and sq.sql_id = '&sql'
) PIVOT (max(value_string) for position in (1,2,3,4,5,6,7,8,9,10))
order by snap_id

可以快速获取某个SQL多个执行计划的执行效果
Select plan_hash_value ,Sum(Elapsed_time_Delta) /greatest(Sum(Executions_Delta),1),sum(Executions_Delta)
From dba_hist_sqlstat where sql_id = '&SQLID' group by plan_hash_value ;

7 http://www.sohu.com/a/232282358_505827 一则CPU 100%的故障分析处理知识和警示
首先通过 v$session 、v$session_wait、v$lock 去确定当前数据库的等待情况,锁信息等
如果数据库失去响应,或者响应困难,则可以通过 Hang Analyze 进行信息采集
如果数据库能够响应,通过ASH报告,可以获取更直观的输出,看看阻塞的情况和情形
8 诊断案例:Failed parse elapsed time引发db time过高的案例  有dbtime指标分析
9 实战课堂:数据库高Library Cache Lock导致Hang的故障分析 http://www.sohu.com/a/233229836_505827

3.5 RAC
    Oracle RAC如何避免脑裂 http://blog.51cto.com/leesbing/1773320 应对照MHA看如何解决脑裂
1 如果节点间通讯断了,那么这时每个节点上有CSSD进程,根据断开的子集群数量最多的原则,所有节点CSSD进程向中裁盘写驱逐信息比如
 节点1,2写驱逐状态3到中裁盘,节点3读取中裁判中驱逐信息发现是自己,于是该节点上CSSD进程启动IO fencing程序隔离自己
2 如果某个节点到仲裁盘的心跳没了,比如节点1,2能访问3个仲裁盘,节点3只能访问2个,那么节点1,2上的主节点如节点1上的cssd进程
 会发指令给节点3,让节点3自杀
 实现IO fencing的方法和进程参考 《了解Oracle RAC Brain Split Resolution集群脑裂协议》 http://cache.baiducontent.com/c?m=9d78d513d98312fe4fece4697c1cc0111c43f0102ba6a7027ea48438e5732c41501694ac53260705a3d20d6116d94f4beb802103341456b48f8fc814d2e1d46e6d9f26476d01d7094d8c42fc965125b67bd60da2f80ee7cda16fccb3828d82014ec954007f87f188&p=9060c64ad4985dff57ee94745c0cc1&newp=882a9645dcdd12a05aa68a215a0d8e231610db2151d7d0166b82c825d7331b001c3bbfb423241b07d7c4786207ac4259e0f63176350727a3dda5c91d9fb4c5747996&user=baidu&fm=sc&query=rac%C8%E7%BA%CE%BD%E2%BE%F6%C4%D4%C1%D1&qid=91fff53f000459af&p1=6

五 zabbix

http://www.cnblogs.com/nmap/p/6539221.html Zabbix-2.4-安装-1

http://blog.csdn.net/mchdba/article/details/51447750 zabbix3.0.2 使用percona mysql插件来监控mysql5.7的详细实现过程

http://blog.itpub.net/23718752/viewspace-2124165/ 简单分析percona-zabbix-templates jeanron100

六 linux 基础
6.1 EPEL 是什么和安装
http://cgs1999.iteye.com/blog/2043008 《在CentOS上安装第三方软件库EPEL 》   
                  Extra Packages for Enterprise Linux (EPEL)【企业版 Linux 附加软件包(以下简称 EPEL)】是一个由特别兴趣小组创建、维护并管理的,
 针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS、 Scientific Linux)的一个高质量附加软件包项目。
EPEL 包含一个叫做epel-release的包,这个包包含了EPEL源的gpg密钥和软件源信息。您可以通过yum安装到您的企业版Linux发行版上。
 除了epel-release源,还有一个叫做epel-testing的源,这个源包含最新的测试软件包,其版本很新但是安装有风险,请自行斟酌。
 如果你使用的是RHEL6.x,CentOS6.x,Scientific6.x等6.x的RHEL系linux的话,执行:
[root@test ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
其实上面安装的那个包就是在你系统/etc/yum.repos.d/下释放了2个yum源的repo文件而已:
/etc/yum.repos.d/epel.repo          正式版,所有的软件都是稳定可以信赖的
/etc/yum.repos.d/epel-testing.repo  测试版

6.2 yum源配置详解
http://www.ming4.com/news/2792.html 《刨根问底:什么是yum源,yum的工作原理又是什么》
vim /etc/yum.repos.d/ yum源配置文件
[rhel-source-beta]     //yum源的名称,起到标记yum源的作用,
name=Red Hat Enterprise Linux $releasever Beta - $basearch - Source  //仅仅是对yum的描述,作用是使用户可以更容易的读懂该文件。
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/beta/$releasever/en/os/SRPMS/  //我们指定的查找依赖关系软件的路径,(该路径可以是一个网址路径,也可以是本机上的一个路径。)
enabled=0       //enabled 是使能够的意思,0表示baseurl定义的路径是不可用的,1表示定义的路径是可用的。
gpgcheck=1  //gpgcheck表示是否进行gpg检测,0表示不进行,1表示进行。gpg检查就是在使用yum安装软件是对软件输入公钥进行验证,看是否来源安全。
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta,file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release    //进行gpg检查时,使用file协议导入公钥,后面接的路径就是系统自带的公钥存放路径。

ftp://   表示使用的是ftp协议连接路径,该协议一般用于非本地连接,本地yum使用的协议是:"file://"文件协议清除缓存,使最新的yum配置生效
[root@linux-6 ~]# yum clean all
  [root@linux-6 ~]# yum list
       
  6.3 创建yum本地库
http://bosszhang.blog.51cto.com/2580498/1678304 yum之如何手动创建本地yum仓库
http://www.cnblogs.com/f-ck-need-u/p/7048359.html Linux回炉复习系列文章总目录

6.4 oracle相关linux参数配置
sysctl.conf学习和调优 《http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73b67848c5425938448e435061e5a24feb074284705d9c42c6051a94248afad762438426bf6ca8ed65ddccb8528589f26442141da1505d368b8ba3232b653872a9fb86ee7&p=aa769a4780d508ff57ee94785740a5&newp=c07fc64ad4d552e90fbd9b7d0d1083231610db2151d3d601298ffe0cc4241a1a1a3aecbf21291203d6c5786201a9495ee0f23276300634f1f689df08d2ecce7e399b6163&user=baidu&fm=sc&query=sysctl%2Econf+%CF%EA%BD%E2&qid=ea560de00000c20c&p1=3
  /etc/security/limits.conf和/etc/sysctl.conf,limits.conf 和sysctl.conf区别在于limits.conf是针对用户,
  而sysctl.conf是针对整个系统参数配置。
  semopm  是一个系统调用时的操作数量
    1 比如发生大量排队等待情况如enqueue lock,比如有500个进程等待一个锁,semopm小了,
          就需要分2次调用semops调用,来通知等待的进程,锁可以使用了
    2 lgwr写完日志后,要通知应用进程日志已写入磁盘,如果很多进程发起提交时,lgwr进程写完磁盘数据后要通知这些发提交的进程
    如果semopm = 250 那么,写完磁盘数据后一次通知250个进程,如果进程数太多,会多次调用semops影响系统性能
  semmni  设置为100。这个参数决定了操作系统启动时初始化信号量的个数设置为100。
  shmmax  设置最大的内存段 如 SHMMAX > SGASIZE : 分配一个单独的共享内存段给sga(首选方式)
              如该值设置太小或者小于最大sga的大小,则sga无法在一个单独的共享内存段hold住整个sga,而需要分配多个不同的共享内存段来完成
  shmall  一次能够使用的最大的共享页面数
    如对于超出8GB系统内存,如共享内存段(shmmax)的最大大小是16G,则所需要共享内存页数(shmall)为:
          16GB/4KB=16777216KB/4KB=4194304(页)
      file-max 最多打开的文件数
  ip_local_port 本地端口范围
  rmem_default  socket发送数据时默认使用的缓冲区大小
  rmem_max      socket发送数据时最大使用的缓冲区大小
  wmem_default  socket接收数据时默认使用的缓冲区大小
  wmem_max      socket接收数据时最大使用的缓冲区大小
  aio-max-nr    最大允许的aio请求数

参数说明参考 ORACLE安装时linux内核参数  http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380147d8c8c4668d4e419ce3b4c413037bfa6663f405a8e906b6075ab180bbda637723d0123b5989dd41c88ac925f75ce786a6459db0144dc44ef98177b9637902bfedf1bf0caf025e5abc5a3dd4353bb125225ddb2d4&p=8b2a97058bb111a05bed9e2a504c94&newp=882a9645dcdb33f101a5c7710f0ec4231610db2151d4da01298ffe0cc4241a1a1a3aecbf2129100ed2c477600aa54a59eaf63c77330834f1f689df08d2ecce7e37fa796d38&user=baidu&fm=sc&query=ORACLE+%B0%B2%D7%B0+semopm&qid=c4f2614e00004a13&p1=1
     
七 数据迁移
MySQL表与数据向Oracle移植(使用Oracle SQL Developer工具) http://blog.csdn.net/u012814041/article/details/17530141

八 SQL优化
8.1 视图合并优化
 子查询经过优化器优化后,可能和外面查询合并,但在合并后产生的执行计划可能有问题,如子查询的表和外面的表形成笛卡尔积的连接具体例子
http://dbaplus.cn/news-21-1283-1.html 基于经典案例,谈SQL改写优化的技巧与误区
https://ask.hellobi.com/blog/azzo/3155 【SQL优化案例】关于内联视图合并
 禁止视图合并的方法。一个查询块中使用了如聚集合运算、rownum等这种需要整体计算的函数的时候,CBO就无法进行视图合并,
 因为如果进行合并改写则可能会引起结果不正确。
SELECT COUNT(Z.REMOTE_URL)
                  FROM ZQGS Z,
                       (SELECT H.H1H2H3
                          FROM H1H2H3 H, HDB D, CCOD_PROV_INFO P, CC_CITY_INFO C
                         WHERE H.AREA_CODE = C.CITY_ID
                           AND C.PROV_ID = P.PROV_ID
                           AND P.PROV_ID = 1
                           AND H.H1H2H3 LIKE D.HD || '%'
                           AND D.ID = '1') M
                 WHERE (Z.END_TYPE = 255 OR Z.END_TYPE = 254)
                   AND Z.REMOTE_URL LIKE 'TEL:' || M.H1H2H3 || '%';
优化器做视图合并时,CCOD_PROV_INFO和HDB的先笛卡尔积后的结果集会和ZQGS关联形成笛卡尔积。,和ZQGS笛卡尔积,是因为关联条件太复杂,
Z LIKE M ,M 还是拼接的条件,所以优化器认为内连试图里有笛卡尔积,正好和外面查询笛卡尔积一起执行就先执行试图合并了
 优化方法是在子查询字段后加 rownum。还可以加hint /*+ NO_MERGE */
                8.2 找驱动表,判断NESTLOOP是否正确,且能引发GC等待
 先观察表结构
 多表关联,查询条件里有子查询。相当于两个结果集连接。且后一个结果集(子查询里有rownum<10条件)
观察执行计划 发现有俩子优化(child number),执行计划一样,表现出的情况是两个结果集连接时,在情况1时,
 相当于两个数量差不多的结果集连接,前面结果集小,子查询的结果集数量差不多。
 情况2时,前面结果集数量大,子查询的结果集数量小
 这两种情况连接时都用了Hash JOIN,且驱动表都是前面结果集。说明前面结果集的过滤条件字段上的数据分布不均匀。
 且驱动表不应该是前面的驱动表,因为,根据查询条件不同,前面驱动表的范围会变化,所以应该用子查询结果集做驱动表。
 解决方法就是用hint /*+ cardinality(表名 1)*/ 让后面的子查询结果集返回基数最小,以便做驱动表
 
8.2 解决面试题 两个字段上有联合索引时,谓词里只选b列时什么时候走跳跃索引
 【SQL 提示 之二】index_ss Index Skip Hint
http://blog.itpub.net/22664653/viewspace-676500/
两个字段组合成联合索引,idx1(a,b)
    a列上有四个不重复值时,自动走skip索引
a列上有6w个不重复值时,走全表扫描
 可见前导列上重复值越多,越会走skip index,原理是如果前导列重复值多,就根据前导列先找到所有相关索引块,再到索引块里找具体
 和前导列相关的b列上的值,但如果重复值很少,先找到前导列相关的块就很慢,没什么意义。

九面试
1 数据库笔试面试题库
http://www.itpub.net/thread-2085022-1-1.html [笔记] 数据库笔试面试题库(Oracle、MySQL、MS SQL Server等)


 十 自动化维护
1 管理多个oracle实例问题
 1)通过shell脚本同时监控多个数据库负载 http://blog.itpub.net/23718752/viewspace-1593351/
         脚本流程
  1 调用脚本showall.sh getload 这里参数是getload脚本名
  2 showall里编写
     定义连接服务器的变量DB_CONN_STR=XXX/XXX 和 SH_DB_SID=XXX
           用DB_CONN_STR连接到指定服务器,执行getload.sh查看服务器dbtime
        3 执行getload.sh 传入的参数就是 DB_CONN_STR@SH_DB_SID
           这里先定义要查询的时间范围
     执行 showsnap函数 查询出指定时间范围中,各小时的dbtime,且保存到本地服务器 按文件格式保存tmp_${SH_DB_SID}_${DATE}_load
           执行 format_rpt函数 增加输出脚本的格式,然后打印各个脚本的内容
  2)使用shell脚本检测数据库连接访问情况 http://blog.itpub.net/23718752/viewspace-2129434/
        3)假期前的数据库检查脚本之主备关系(r11笔记第46天) http://blog.itpub.net/23718752/viewspace-2132534/

 4)单个脚本监控主机上所有实例的表空间利用率 http://blog.itpub.net/15480802/viewspace-774718/
        5)脚本项目 dbm_lite  https://github.com/jeanron100/dbm_lite
                           http://blog.itpub.net/23718752/viewspace-2142814/
        6)通过shell脚本来得到不稳定的执行计划 http://blog.itpub.net/23718752/viewspace-1430606/
          求出每个计划执行时间的标准差,判断计划的差异性
 7)巧用shell脚本统计磁盘使用情况 http://blog.itpub.net/23718752/viewspace-1398417/
      8)使用shell自动化诊断性能问题(一)(r11笔记第41天) http://blog.itpub.net/23718752/viewspace-2132288/
      9)通过shell脚本抓取awr报告中的问题sql http://blog.itpub.net/23718752/viewspace-1813362/

11.2 自动化运维
Linux Shell脚本之自动修改IP  http://blog.51cto.com/wgkgood/1092059
http://blog.51cto.com/wgkgood/p3?type=1
十一PYTHON
11.1 基础
在eclipse上安装python插件,PyDev的过程
https://blog.csdn.net/dengxt/article/details/52766443
Django 数据导入
https://code.ziqiangxuetang.com/django/django-import-data.html 有源码可用
django安装及oracle配置
https://blog.csdn.net/laodengbaiwe0838/article/details/52895010
python3.4连接和读取oracle数据表
https://blog.csdn.net/u013600225/article/details/51168607
django--模型层(ORM)-建表
https://www.cnblogs.com/52forjie/p/7825214.html 有增删改查包括也没示例
python3.4连接和读取oracle数据表
https://blog.csdn.net/u013600225/article/details/51168607 有安装oracle的网址

数据仓库

1模型设计
 1先了解业务流程,主要是了解业务主线;行业术语;指标体系
 2确定数据粒度,比如数据库存粒度是imei,还是item等
 3确定维度和事实表 比如统计门店库存覆盖率,要知道各周里有库存值的门店数量和某月的门店数量之间的比例
  这里就要确定维度是日期维度,渠道类型(渠道路径DA,OND,SFD),客户类型(渠道类型里客户的类型是金牌客户),
  事实是每月统计的门店数和库存覆盖率(周有库存门店数/月门店数)
 4确定dw层,底层都放哪些数据,比如RW数据,所有imei级别的的数据包括imei对应的在一级代理商,二级代理商,门店时的psi等属性
  
  目前模型是源数据库导出数据到中间ETL服务器,ETL服务器相当于ODS,经过清洗,转关和加载放到数据仓库的dw层,都是清洗的原子数据
 然后再汇总到集市层。
 
模型设计实例
 参考《需求-面试章节》

设计 ODS-DM 大致三个步骤, 先把各阶段日期,渠道商等阶段信息合并放入RW_FOTA_SO,再根据各阶段的日期计算st/si到开机时的时间差放入RW_FT_LT,最后按日统计出lt时间差在2w/4w
的数据放入DM表


2拉链算法

http://blog.csdn.net/badyflf/article/details/51097552  【ETL】拉链表算法

数据仓库拉链算法在ORACLE中的实现 http://blog.csdn.net/badyflf/article/details/51097552

http://blog.itpub.net/16723161/viewspace-1017421/ 数据仓库之拉链算法(转)

内容中有举例算法,而且是正确的。
 实际是先取出当日的全量数据比如2千万,然后取昨日的全量数据也是2千万。然后拿昨天的所有数据减去今天的所有数据
 每条数据都对比状态,然后找出的是只在昨天有的数据,这说明昨天的数据1状态是1,今天的数据1状态就是2,状态已经改变了
 那这样的数据都是要封连的数据;
 这之后再用今天的数据减去昨天的数据,那就是今天新增的数据,和改变的数据,把今天改变的数据也要查到历史表里,
 比如数据1的状态是2了,他的起始和结束时间也改变了,要和之前封链的数据连接上,所以也要插入到历史表。然后再把
 新插入的数据和今天改变的数据,以及昨天数据中已将改变的数据都插入到历史表
 总之就是昨天的数据和今天比改变了就要update 做封链(今天的日期是结束日子),今天的数据和昨天比改变了,就要把今天的改变数据插入历史表

重新记录今天的日期是起始日期



大数据

1大数据数据来源网站

http://data.stats.gov.cn/ 国内统计网站

https://github.com/caesar0301/awesome-public-datasets 

http://www.bazhuayu.com  数据采集


视频课程
http://edu.51cto.com/course/3830.html 51ctosanxing028

补充内容
toad ER 写注释脚本
function main(){
         var app = System.GetInterface('Application');
  var Model = app.Models.GetObject(12); // gets first open model
  var e, a, Entity, Attribute;
  var tempName;
  Model.Lock();
  for (e=0; e<Model.Entities.Count; e++) // iterate entities
  {
    Entity = Model.Entities.GetObject(e);
    /*if(Model.Entities.SupportsProperty('Customer')==false){
           continue;
    }*/
    Entity.Lock();
    Entity.Comments += Entity.Caption;
    for (a=0; a<Entity.Attributes.Count; a++) // iterate attributes
    {
      Attribute = Entity.Attributes.GetObject(a);
      //Attribute.Comments = '';
      //Attribute.Comments = Attribute.Caption+":"+Attribute.Comments;
      if(Attribute.Comments != '')
       {      
       tempName =Attribute.Name;
       Attribute.Caption='';
       Attribute.Caption = Attribute.Comments;
       Attribute.Name = tempName;
       }
    }
    Entity.UnLock();
  }
  Model.UnLock();
}
 
.后文继续,持续更新!!
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/750077/viewspace-2142055/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/750077/viewspace-2142055/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值