當前位置:首頁 » 編程語言 » sql並行度

sql並行度

發布時間: 2022-12-21 05:58:36

A. sql server 2008最大並行度0什麼意思

表示由幾個CPU並行運算,MAXDOP=0 可以說表示由系統自動調配

MAXDOP的值不能超過CPU數,你可以用

sp_configure設置,也可以在查詢語句上用with option(MAXDOP=1)指定


數據伺服器的設置值也可以用ssms查看

B. SQL調用伺服器核心數(oracle 多線程)

select    /*+parallel(t,25)+*/ 

一、Parallel

1. 用途

強行啟用並行度來執行當前SQL。這個在Oracle 9i之後的版本可以使用,之前的版本現在沒有環境進行測試。也就是說,加上這個說明,可以強行啟用Oracle的多線程處理功能。舉例的話,就像電腦裝了多核的CPU,但大多情況下都不會完全多核同時啟用(2核以上的比較明顯),使用parallel說明,就會多核同時工作,來提高效率。

但本身啟動這個功能,也是要消耗資源與性能的。所有,一般都會在返回記錄數大於100萬時使用,效果也會比較明顯。

2. 語法

/*+parallel(table_short_name,cash_number)*/

這個可以加到insert、delete、update、select的後面來使用(和rule的用法差不多,有機會再分享rule的用法)

開啟parallel功能的語句是:

alter session enable parallel dml;

這個語句是DML語句哦,如果在程序中用,用execute的方法打開。

3. 實例說明

用ERP中的transaction來說明下吧。這個table記錄了所有的transaction,而且每天數據量也算相對比較大的(根據企業自身業務量而定)。假設我們現在要查看對比去年一年當中每月的進、銷情況,所以,一般都會寫成:

select to_char(transaction_date,'yyyymm') txn_month,

sum(

decode(

sign(transaction_quantity),1,transaction_quantity,0

)

) in_qty,

sum(

decode(

sign(transaction_quantity),-1,transaction_quantity,0

)

) out_qty

from mtl_material_transactions mmt

where transaction_date >= add_months(

to_date( 

to_char(sysdate,'yyyy')||'0101','yyyymmdd'),

-12)

and transaction_date <= add_months(

to_date(

to_char(sysdate,'yyyy')||'1231','yyyymmdd'),

-12)

group by to_char(transaction_date,'yyyymm') 

這個SQL執行起來,如果transaction_date上面有加index的話,效率還算過的去;但如果沒有加index的話,估計就會半個小時內都執行不出來。這是就可以在select 後面加上parallel說明。例如:

select /*+parallel(mmt,10)*/

to_char(transaction_date,'yyyymm') txn_month,

...

這樣的話,會大大提高執行效率。如果要將檢索出來的結果insert到另一個表tmp_count_tab的話,也可以寫成:

insert /*+parallel(t,10)*/

into tmp_count_tab

(

txn_month,

in_qty,

out_qty

)

select /*+parallel(mmt,10)*/

to_char(transaction_date,'yyyymm') txn_month,

...

插入的機制和檢索機制差不多,所以,在insert後面加parallel也會加速的。關於insert機制,這里暫不說了。

Parallel後面的數字,越大,執行效率越高。不過,貌似跟server的配置還有oracle的配置有關,增大到一定值,效果就不明顯了。所以,一般用8,10,12,16的比較常見。我試過用30,發現和16的效果一樣。不過,數值越大,佔用的資源也會相對增大的。如果是在一些package、function or procere中寫的話,還是不要寫那麼大,免得佔用太多資源被DBA開K。

4. Parallel也可以用於多表

多表的話,就是在第一後面,加入其他的就可以了。具體寫法如下:

/*+parallel(t,10) (b,10)*/

5. 小結

關於執行效率,建議還是多按照index的方法來提高效果。Oracle有自帶的explan road的方法,在執行之前,先看下執行計劃路線,對寫好的SQL tuned之後再執行。實在沒辦法了,再用parallel方法。Parallel比較邪惡,對開發者而言,不是好東西,會養成不好習慣,導致很多bad SQL不會暴漏,SQL Tuning的能力得不到提升。我有見過某些人create table後,從不create index或primary key,認為寫SQL時加parallel就可以了。

C. oracle設置表的並行度是什麼意思

查看dba_tables數據字典時,可以發現有「DEGREE」欄位,這個欄位表示的就是數據表的並行度。這個參數的設置,關系著資料庫的I/O,以及sql的執行效率。

並行度的優點就是能夠最大限度的利用機器的多個cpu資源,是多個cpu同時工作,從而達到提高資料庫工作效率的目的。在系統空閑時間,使用並行是個不錯的選擇,但是好東西總是相對而言,沒有絕對的好壞,不當的使用,同樣會引起資料庫的新的問題產生。
1、 此參數的大小設置
orcl@ SCOTT> select table_name,degree from user_tables;

TABLE_NAME DEGREE
------------------------------ --------------------
T1 1
TAB_REGISTER 1
EMP 1
EMP_BAK 1
SALGRADE 1
BONUS 1
DEPT 1
LETTER_USER 1
T2 1
BASE_LOG 1
T 1
通過上例的例子大家可以觀察,此參數的默認值為1,這個數值,我們認為的增加,當設置表的並行度非常高的時候,sql優化器將可能對表進行全表掃描,引起 Direct Path Read 等待 。
在使用並行查詢前需要慎重考慮, 因為並行查詢盡管能提高程序的響應時間, 但是會
消耗比較多的資源。 對於低配置的資料庫伺服器需要慎重。 此外, 需要確認並行度的設置要與 IO 系統的配置相符(建議並行度為 2~4 * CPU 數) 。
2、 並行度的修改
alter table t parallel(degree 1);------直接指定表的並行度
alter table t parallel; ----------設置表的並行度為default
3、 如何在sql語句中使用表的並行度,並選擇合適的並行等級
示例:使用並行查詢的執行計劃
並行度為4
orcl@ SCOTT> SELECT /*+ PARALLEL(4) */
2 MAX(sal),
3 AVG(comm)
4 FROM emp,dept
5 WHERE emp.deptno=dept.deptno
6 GROUP BY 1

D. sql中怎樣修改表的名字

1、首先在電腦中打開SQL Developer,右擊要操作的資料庫,選擇【連接】,如下圖所示。

E. 2019-03-05 SparkSQL集群性能調優 CheatSheet

0.買高性能機器,增加節點

1.設置磁碟文件預讀值大小為16384,使用linux命令:

echo 16384 > /sys/block/{磁碟名}/queue/read_ahead_kb

2. Spark 任務序列化只支持JavaSerializer,數據序列化支持JavaSerializer和 KryoSerializer 。KryoSerializer能達到JavaSerializer的十倍。

3.在spark.driver.extraJavaOptions和spark.executor.extraJavaOptions配置項中添加參數:" -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps ",如果頻繁出現Full GC,需要優化GC。把RDD做Cache操作,通過日誌查看RDD在內存中的大小,如果數據太大,需要改變RDD的存儲級別來優化。

4.一般並行度設置為集群CPU總和的2-3倍

5.大表和小表做join操作時可以把小表Broadcast到各個節點,從而就可以把join操作轉變成普通的操作,減少了shuffle操作。

6. 合理設計DAG,減少shuffle  //TODO

7.使用 mapPartitions 可以更靈活地操作數據,例如對一個很大的數據求TopN,當N不是很大時,可以先使用mapPartitions對每個partition求TopN,collect結果到本地之後再做排序取TopN。這樣相比直接對全量數據做排序取TopN效率要高很多。

8.當之前的操作有很多filter時,使用 coalesce 減少空運行的任務數量

9.當任務數過大時候Shuffle壓力太大導致程序掛住不動,或者出現linux資源受限的問題。此時需要對數據重新進行分區,使用 repartition 。

10.配置多個磁碟給 localDir ,shuffle時寫入數據速度增快

11. 別collect大數據量,數據會回到driver端,容易OOM。非要collect,請配置 spark.sql.bigdata.thriftServer.useHdfsCollect 為true,會存在hdfs再讀

12.盡量用receByKey,會在Map端做本地聚合

13. broadcase set/map而不是Iterator, set/map 查詢效率O(1) ,iteratorO(n)

14. 數據發生傾斜,repartition大法 ,查出key,salt it

15.使用Hash Shuffle時,通過設置 spark.shuffle.consolidateFiles 為true,來合並shuffle中間文件,減少shuffle文件的數量,減少文件IO操作以提升性能

16.Spark SQL 小表join,把小表broadcast出去。配置 spark.sql.autoBroadcastJoinThreshold 和 spark.sql.bigdata.useExecutorBroadcast 。小表在join 右端。

17.SparkSQL數據傾斜,配置 spark.sql.planner.skewJoin 和 spark.sql.planner.skewJoin.threshold

18. SparkSQL 小文件,配置 spark.sql.small.file.combine 和  spark.sql.small.file.split.size

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:515
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:19
linux485 發布:2025-07-05 14:38:28 瀏覽:299
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:750
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:425
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:684
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:233
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:678
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:277
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:828