廣州網(wǎng)站排名優(yōu)化費(fèi)用招聘網(wǎng)絡(luò)營(yíng)銷推廣人員
1. Oracle高可用和ob高可用,和他們的實(shí)現(xiàn)方式?
2.ob的三副本了解嗎,ob的三副本怎么保障強(qiáng)一致的?
3.三副本能實(shí)現(xiàn)強(qiáng)一致嗎?
4.了解ob的數(shù)據(jù)協(xié)調(diào)協(xié)議嗎?說(shuō)說(shuō)原理
5.聊聊Oracle,講一些SQL調(diào)優(yōu)的實(shí)際案例?
6.剛才聊到了分區(qū)表的分區(qū)裁剪,假如不調(diào)整謂詞條件的情況下,有什么方法也能加速SQL?
7.并行了解嗎,說(shuō)一下并行的機(jī)制,怎么使用的?
8.為什么生產(chǎn)環(huán)境不推薦使用并行?主要對(duì)哪些資源有壓力
9.redo是用來(lái)做什么的?Oracle select會(huì)寫redo嗎?
10.Oracle寫入數(shù)據(jù),講一下數(shù)據(jù)落盤的過(guò)程。
11.RAC集群數(shù)據(jù)落盤的過(guò)程。
12.假如兩個(gè)節(jié)點(diǎn)的RAC,比如一節(jié)點(diǎn)寫了1,二節(jié)點(diǎn)會(huì)有什么操作?操作的順序了解嗎
13.介紹一下實(shí)習(xí)經(jīng)歷
14.OB三個(gè)節(jié)點(diǎn)如果宕機(jī)一個(gè)影響使用嗎?宕機(jī)的過(guò)程中會(huì)有什么樣的表現(xiàn)?
15.只有三個(gè)機(jī)器,一臺(tái)宕機(jī)了,unit能遷移走嗎?
16.現(xiàn)在正在往集群里面寫入數(shù)據(jù),宕機(jī)了一臺(tái),在業(yè)務(wù)端看來(lái)會(huì)有什么樣的表現(xiàn)?
答案
1.Oracle高可用和ob高可用,和他們的實(shí)現(xiàn)方式?
?
數(shù)據(jù)庫(kù) | 高可用方案 | 實(shí)現(xiàn)原理 |
---|---|---|
Oracle | RAC | 多節(jié)點(diǎn)共享存儲(chǔ),通過(guò)Cache Fusion同步內(nèi)存數(shù)據(jù)。故障時(shí)秒級(jí)切換,應(yīng)用透明。 |
OceanBase | 分布式Paxos協(xié)議 | 數(shù)據(jù)分片(Partition)+三副本,基于Paxos協(xié)議實(shí)現(xiàn)多副本強(qiáng)一致,無(wú)共享架構(gòu)。 |
2.ob的三副本了解嗎,ob的三副本怎么保障強(qiáng)一致的?
每個(gè)數(shù)據(jù)分片(Partition)包含3個(gè)副本(Leader/Follower/Follower)。
寫入流程:
強(qiáng)一致保證:僅當(dāng)多數(shù)副本(≥2)持久化日志后,才向客戶端返回成功。
3.三副本能實(shí)現(xiàn)強(qiáng)一致嗎?
能,通過(guò)Paxos協(xié)議約束: 任何寫入需多數(shù)副本確認(rèn)(如3副本需≥2個(gè)確認(rèn))。網(wǎng)絡(luò)分區(qū)時(shí),少數(shù)派副本自動(dòng)拒絕寫入,避免腦裂。
4.了解ob的數(shù)據(jù)協(xié)調(diào)協(xié)議嗎?說(shuō)說(shuō)原理
Multi-Paxos優(yōu)化:
-
Leader選舉: 通過(guò)Paxos協(xié)議選舉唯一Leader處理寫入。
-
日志復(fù)制:Leader生成Redo日志并廣播給Followers。
-
Followers持久化日志后返回ACK。
-
收到多數(shù)ACK后,Leader提交并應(yīng)用日志。
-
日志回放: 所有副本按相同順序應(yīng)用日志,保障狀態(tài)機(jī)一致性。
5.聊聊Oracle,講一些SQL調(diào)優(yōu)的實(shí)際案例?
SELECT?*?FROM?sales?WHERE?TO_CHAR(sale_date,'YYYY-MM')?=?'2023-10';?--?函數(shù)導(dǎo)致裁剪失效
優(yōu)化:
SELECT?*?FROM?sales?WHERE?sale_date?BETWEEN?DATE'2023-10-01'?AND?DATE'2023-10-31';?--?直接范圍查詢
6.剛才聊到了分區(qū)表的分區(qū)裁剪,假如不調(diào)整謂詞條件的情況下,有什么方法也能優(yōu)化SQL?
-
全局索引: 避免分區(qū)鍵限制。
-
本地索引分區(qū): 每個(gè)分區(qū)獨(dú)立索引,加速掃描。
-
統(tǒng)計(jì)信息更新: DBMS_STATS.GATHER_TABLE_STATS確保優(yōu)化器準(zhǔn)確選擇分區(qū)。
-
SQL Profile: 使用SQL Tuning Advisor固定高效執(zhí)行計(jì)劃。
7.并行了解嗎,說(shuō)一下并行的機(jī)制,怎么使用的?
啟用并行:
ALTER?SESSION?ENABLE?PARALLEL?DML;
SELECT?/*+?PARALLEL(emp,?4)?*/?*?FROM?emp;?--?強(qiáng)制4個(gè)并行進(jìn)程
資源控制:
PARALLEL_DEGREE_POLICY:?控制并行度策略(AUTO/MANUAL)。
PARALLEL_SERVERS_TARGET:?限制并行服務(wù)器數(shù)。
8.生產(chǎn)環(huán)境不推薦并行的原因
-
CPU: 并行進(jìn)程爭(zhēng)搶CPU,導(dǎo)致系統(tǒng)負(fù)載飆升。
-
I/O: 大量并行掃描引發(fā)存儲(chǔ)吞吐瓶頸。
主要原因是CPU和IO,內(nèi)存方面不是主要原因。
-
內(nèi)存: 每個(gè)并行進(jìn)程消耗PGA內(nèi)存,可能觸發(fā)ORA-4030。
-
鎖競(jìng)爭(zhēng): 并行DML加劇鎖沖突(如TX鎖)。
9.redo是用來(lái)做什么的?Oracle select會(huì)寫redo嗎?
核心功能: 記錄所有數(shù)據(jù)變更(DML/DDL),用于故障恢復(fù)。
SELECT語(yǔ)句不會(huì)直接生成redo日志,因?yàn)樗鼈儾恍薷臄?shù)據(jù)庫(kù)內(nèi)容。但在維護(hù)讀一致性、使用直接路徑讀取、執(zhí)行遞歸SQL以及觸發(fā)PL/SQL函數(shù)或數(shù)據(jù)庫(kù)觸發(fā)器時(shí),可能會(huì)間接產(chǎn)生redo日志。
具體原因參考文章: select會(huì)寫redo嗎
10.Oracle寫入數(shù)據(jù),講一下數(shù)據(jù)落盤的過(guò)程。
-
用戶提交DML。
-
日志寫入Log Buffer。
-
LGWR將Log Buffer刷新到Redo Log文件(優(yōu)先保證日志落盤)。
-
DBWR將臟塊從Buffer Cache寫入數(shù)據(jù)文件(異步進(jìn)行)。
11.RAC集群數(shù)據(jù)落盤的過(guò)程。
階段 | 關(guān)鍵組件 | 工作流程設(shè)計(jì)目標(biāo)設(shè)計(jì)目標(biāo) | 設(shè)計(jì)目標(biāo) |
---|---|---|---|
1. 數(shù)據(jù)塊傳遞 | Cache Fusion | 1. 節(jié)點(diǎn)A修改數(shù)據(jù)塊時(shí),通過(guò)私網(wǎng)(Interconnect)將塊副本傳輸給請(qǐng)求節(jié)點(diǎn)B2. GCS 跟蹤塊狀態(tài)(CR/XD 模式)3. 塊在內(nèi)存間直接傳遞,避免磁盤 I/O | 減少共享存儲(chǔ)訪問(wèn)提升并發(fā)性能 |
2. Redo 日志落盤 | ASM 存儲(chǔ) | 1. 每個(gè)節(jié)點(diǎn)獨(dú)立寫入本地 Redo 日志線程2. 日志寫入共享存儲(chǔ)(ASM 磁盤組)3. 提交時(shí)強(qiáng)制刷盤(Commit = Log Written) | 確保事務(wù)持久性節(jié)點(diǎn)故障時(shí)恢復(fù) |
3. 臟塊寫入 | DBWR 進(jìn)程 | 1. GCS 協(xié)調(diào)臟塊刷盤順序2. 持有最新版本的節(jié)點(diǎn)執(zhí)行寫盤3. 寫入共享數(shù)據(jù)文件(ASM) | 保證數(shù)據(jù)一致性減少寫沖突 |
4. 全局一致性 | GCS + GES | 1. GES 管理全局鎖(如 TX 鎖)2. GCS 協(xié)調(diào)塊訪問(wèn)權(quán)3. 通過(guò)塊版本號(hào)解決沖突 | 跨節(jié)點(diǎn)讀一致性 寫操作串行化 |
12.假如兩個(gè)節(jié)點(diǎn)的RAC,比如一節(jié)點(diǎn)寫了1,二節(jié)點(diǎn)會(huì)有什么操作?操作的順序了解嗎
?
場(chǎng)景:節(jié)點(diǎn)1寫入數(shù)據(jù)塊A(值為1)
-
節(jié)點(diǎn)1持有A的Exclusive鎖。
-
節(jié)點(diǎn)2請(qǐng)求修改A:
-
通過(guò)GCS向節(jié)點(diǎn)1請(qǐng)求塊副本。
-
節(jié)點(diǎn)1將A的當(dāng)前版本+鎖信息傳遞給節(jié)點(diǎn)2。
-
節(jié)點(diǎn)2在本地緩存中修改A,生成Redo日志并落盤。
-
節(jié)點(diǎn)2通過(guò)GCS廣播塊變更信息。
13.介紹一下實(shí)習(xí)經(jīng)歷
省略
14.OB三個(gè)節(jié)點(diǎn)如果宕機(jī)一個(gè)影響使用嗎?宕機(jī)的過(guò)程中會(huì)有什么樣的表現(xiàn)?
?
-
宕機(jī)一個(gè)節(jié)點(diǎn):
無(wú)影響: 剩余2節(jié)點(diǎn)滿足多數(shù)派(2/3),服務(wù)正常。
Leader切換: 宕機(jī)節(jié)點(diǎn)若含Leader副本,5秒內(nèi)自動(dòng)選舉新Leader。
-
宕機(jī)過(guò)程表現(xiàn):
客戶端連接該節(jié)點(diǎn)的會(huì)話斷開(需重試)。 其他節(jié)點(diǎn)短暫寫入延遲(Paxos重新協(xié)商)。
1.如果是三個(gè)單zone單observer是一份數(shù)據(jù)。如果某OBServer掛掉了,且超過(guò) server_permanent_offline_time時(shí)間限制會(huì)永久下線,需要把這個(gè)單zone單observer下掉。重新部署上去。
2.如果是三個(gè)單zone多observer,且primary_zone 為 RANDOM 時(shí),ob數(shù)據(jù)是以分布式存儲(chǔ)的(以分區(qū)形式來(lái)的,按分區(qū)的粒度自動(dòng)均衡到不同的OBServer節(jié)點(diǎn),打散數(shù)據(jù))
15.只有三個(gè)機(jī)器,一臺(tái)宕機(jī)了,unit能遷移走嗎?
?
-
當(dāng)某個(gè)OBServer節(jié)點(diǎn)掛掉時(shí):
多副本機(jī)制:ob通常會(huì)在不同的OBServer上存儲(chǔ)數(shù)據(jù)的多個(gè)副本(通常是3個(gè)副本)。這意味著即使一個(gè)節(jié)點(diǎn)失敗,其他節(jié)點(diǎn)上仍然有數(shù)據(jù)的副本。
數(shù)據(jù)同步:在節(jié)點(diǎn)恢復(fù)后,ob會(huì)自動(dòng)同步該節(jié)點(diǎn)上的數(shù)據(jù),確保所有節(jié)點(diǎn)上的數(shù)據(jù)副本保持一致。
在官網(wǎng)論壇上找到的,所以結(jié)論應(yīng)該是沒有遷移走。。
16.現(xiàn)在正在往集群里面寫入數(shù)據(jù),宕機(jī)了一臺(tái),在業(yè)務(wù)端看來(lái)會(huì)有什么樣的表現(xiàn)?
?
-
客戶端視角:
短時(shí)報(bào)錯(cuò)(如Connection reset),持續(xù)約1-5秒。
自動(dòng)恢復(fù): OBProxy 自動(dòng)重試請(qǐng)求到新Leader。
-
數(shù)據(jù)一致性:
已提交的數(shù)據(jù)不丟失(多數(shù)副本已持久化)。
未提交的事務(wù)自動(dòng)回滾。