有用教程收藏

flzhang發表於2017-07-14


一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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章