有用教程收藏
一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://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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 收藏的有用部落格及原始碼地址原始碼
- GIS 有用地址及水利行業網站地址收藏行業網站
- 收藏|Numpy詳細教程
- 8個有用的jQuery Mobile教程jQuery
- 10個超級有用、必須收藏的PHP程式碼樣例PHP
- MySQL入門教程 – 收藏集 – 掘金MySql
- 收藏一個《視訊錄製的教程》
- 對於Web開發很有用的jQuery效果製作教程WebjQuery
- Billy Belceb病毒編寫教程(DOS篇)有用的結構體結構體
- Java入門到精通完整教程,學Java先收藏了!Java
- 10 篇對初學者和專家都有用的 Linux 命令教程Linux
- 有用的命令
- 用一個月整理的Pandas的教程!最全面的教程沒有之一!先收藏吧!
- 【Python從入門到精通】(十一)Python的函式的方方面面【收藏下來保證有用!!!】Python函式
- 13個有用的HTML5、CSS3和jQuery搜尋表單教程HTMLCSSS3jQuery
- 2021-常見PHP面試題型大全彙總並且附上答案哦!整理不易,有用記得收藏哈!PHP面試題
- 微信收藏拼長圖發朋友圈教程 微信怎麼拼圖?
- 有用的 oracle 包Oracle
- 有用的資料
- 有用的廢話
- Github收藏Github
- PHP很有用的功能PHP
- SCJP證書有用不
- Python有用的模組Python
- 網站收藏網站
- 程式碼收藏
- [翻譯]Billy Belceb 病毒編寫教程for Win32 ----病毒編寫中的有用的東西Win32
- postMessage可太有用了
- 8個有用的JS技巧JS
- 8 個有用的 JS 技巧JS
- IT培訓報班有用嗎?
- iOS-清除快取(有用)iOS快取
- 有用的C語言工具C語言
- 非常有用的網站網站
- 20 個有用的 SVG 工具SVG
- 有用的小工具收集
- oracle幾個有用的命令Oracle
- mount -o remount, rw / 很有用..REM