摘要:一關(guān)于參數(shù)這個(gè)參數(shù)配置決定了每個(gè)并行操作允許的最大后臺(tái)進(jìn)程數(shù),這個(gè)值的設(shè)置受后臺(tái)進(jìn)程數(shù)參數(shù)限制。查看并行順序掃描進(jìn)程備注圖中可看到出現(xiàn)了四個(gè)進(jìn)程。三測(cè)試測(cè)試之前先把的數(shù)據(jù)庫(kù)關(guān)了,在確保相等情況下進(jìn)行測(cè)試。
Oracle 支持強(qiáng)大的并行功能,創(chuàng)建索引,表分析,數(shù)據(jù)加載時(shí)可以開啟并行,這項(xiàng)功能讓很多數(shù)據(jù)庫(kù)產(chǎn)品垂涎, 作為開源數(shù)據(jù)庫(kù) PostgreSQL 在并行方面也在努力嘗試,很早之前 PostgreSQL 幾乎不支持任何并行的作業(yè),到了 9.5 版本 PostgreSQL 支持并行的 vacuum,到了 9.6 后, PostgreSQL 支持并行的順序掃描,這是令人振奮的消息,因?yàn)檫@極大的提升了 PostgreSQL 統(tǒng)計(jì)分析SQL的性能,由于硬件環(huán)境限制,今天簡(jiǎn)單體驗(yàn)下,以下實(shí)驗(yàn)在筆記本虛擬機(jī)上進(jìn)行。
一 關(guān)于 max_parallel_degree (integer) 參數(shù)這個(gè)參數(shù)配置決定了每個(gè) parallel query 并行操作允許的最大后臺(tái)進(jìn)程數(shù),這個(gè)值的設(shè)置受后臺(tái)進(jìn)程數(shù)參數(shù) max_worker_processes 限制。
二 PostgreSQL9.6 Beta1 測(cè)試--設(shè)置 max_parallel_degree
[pg96@db1 ~]$ grep "max_parallel_degree" $PGDATA/postgresql.conf max_parallel_degree = 4 # max number of worker processes per node
--創(chuàng)建測(cè)試表
[pg96@db1 ~]$ psql francs francs psql (9.6beta1) Type "help" for help. francs=> create table test_big1(id serial, name character varying(64),create_time timestamp(0) without time zone); CREATE TABLE francs=> insert into test_big1(id,name)select n, n||"_test" from generate_series(1,5000000)n; INSERT 0 5000000
--執(zhí)行計(jì)劃
francs=> explain analyze select count(*) from test_big1; ------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost=45560.42..45560.43 rows=1 width=8) (actual time=4236.468..4236.469 rows=1 loops=1) -> Gather (cost=45560.00..45560.41 rows=4 width=8) (actual time=4232.517..4232.556 rows=5 loops=1) Workers Planned: 4 Workers Launched: 4 -> Partial Aggregate (cost=44560.00..44560.01 rows=1 width=8) (actual time=4182.972..4182.973 rows=1 loops=5) -> Parallel Seq Scan on test_big1 (cost=0.00..41435.00 rows=1250000 width=0) (actual time=0.034..2450.966 rows=1000000 loops=5) Planning time: 112.309 ms Execution time: 4236.920 ms (8 rows)
備注:執(zhí)行多次,執(zhí)行時(shí)間大概都在4秒多點(diǎn),從執(zhí)行計(jì)劃中看到走了并行順序掃描“Parallel Seq Scan on test_big1”,再細(xì)看“Workers Launched: 4”,表示開啟了四個(gè)并行進(jìn)程。
--查看并行順序掃描進(jìn)程
備注:圖中可看到出現(xiàn)了四個(gè) parallel worker 進(jìn)程。
測(cè)試之前先把 PostgreSQL 9.6 的數(shù)據(jù)庫(kù)關(guān)了,在確保相等情況下進(jìn)行測(cè)試。
--創(chuàng)建測(cè)試表
[pg95@db1 ~]$ psql fdb fdb psql (9.5alpha1) Type "help" for help. fdb=> create table test_big1(id serial, name character varying(64),create_time timestamp(0) without time zone); CREATE TABLE fdb=> insert into test_big1(id,name)select n, n||"_test" from generate_series(1,5000000)n; INSERT 0 5000000 fdb=> explain analyze select count(*) from test_big1; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------- Aggregate (cost=91435.00..91435.01 rows=1 width=0) (actual time=8389.093..8389.094 rows=1 loops=1) -> Seq Scan on test_big1 (cost=0.00..78935.00 rows=5000000 width=0) (actual time=9.958..4781.116 rows=5000000 loops=1) Planning time: 2.436 ms Execution time: 8391.758 ms (4 rows)
備注:多次執(zhí)行,時(shí)間在 8 秒左右。
四 總結(jié)由于硬件關(guān)系原因,本測(cè)試只在筆記本虛擬機(jī)上測(cè)試,在這個(gè)全表掃描測(cè)試場(chǎng)景下, PostgreSQL 9.6 是 PostgreSQL9.5 性能的兩倍,今天僅是初步體驗(yàn)并行掃描,可以預(yù)測(cè)如果在X86服務(wù)器上測(cè)試,這個(gè)性能倍數(shù)會(huì)高一些,后續(xù)測(cè)試并行掃描的其它場(chǎng)景;個(gè)人認(rèn)為 PostgreSQL 對(duì)并行順序掃描的支持,在統(tǒng)計(jì)分析性能方面的提升前進(jìn)了一大步。
五 參考Robert Haas: PostgreSQL 9.6 with Parallel Query vs. TPC-H
max_parallel_degree (integer)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38977.html
摘要:首先是最頂層的抽象,這個(gè)里面最基礎(chǔ)的就是和,記憶中和的抽象是類似的,將計(jì)算結(jié)果和偏導(dǎo)結(jié)果用一個(gè)抽象類來表示了。不過,本身并沒有像其它兩個(gè)庫(kù)一樣提供,等模型的抽象類,因此往往不會(huì)直接使用去寫模型。 本文將從deep learning 相關(guān)工具庫(kù)的使用者角度來介紹下github上stars數(shù)排在前面的幾個(gè)庫(kù)(tensorflow, keras, torch, theano, skflow, la...
摘要:第一個(gè)函數(shù)生成一個(gè)新的實(shí)例第二個(gè)函數(shù)接受兩個(gè)參數(shù),第一個(gè)是前面生成的對(duì)象,二個(gè)是中包含的元素,函數(shù)體就是把中的元素加入對(duì)象中。 感謝同事【天錦】的投稿。投稿請(qǐng)聯(lián)系 tengfei@ifeve.com 上篇文章[Java8初體驗(yàn)(一)lambda表達(dá)式語法]()比較詳細(xì)的介紹了lambda表達(dá)式的方方面面,細(xì)心的讀者會(huì)發(fā)現(xiàn)那篇文章的例子中有很多Stream的例子。這些Stream的例子可...
摘要:正確使用并行流錯(cuò)用并行流而產(chǎn)生錯(cuò)誤的首要原因,就是使用的算法改變了某些共享狀態(tài)。高效使用并行流留意裝箱有些操作本身在并行流上的性能就比順序流差還要考慮流的操作流水線的總計(jì)算成本。 一、并行流 1.將順序流轉(zhuǎn)換為并行流 對(duì)順序流調(diào)用parallel方法: public static long parallelSum(long n) { return Stream.iterate(1L...
閱讀 3234·2021-11-23 09:51
閱讀 1041·2021-08-05 09:58
閱讀 674·2019-08-29 16:05
閱讀 984·2019-08-28 18:17
閱讀 3038·2019-08-26 14:06
閱讀 2732·2019-08-26 12:20
閱讀 2167·2019-08-26 12:18
閱讀 3073·2019-08-26 11:56