1. 程式人生 > >基於oracle的sql優化

基於oracle的sql優化

一.編寫初衷描述

在應有系統開發初期,由於資料庫資料較少,對於sql語句各種寫法的編寫體現不出sql的效能優劣,隨著資料的不斷增加,出現海量資料,劣質sql與優質sql在執行效率甚至存在百倍差距,可見sql優化的重要性

二.Sql語句效能優化

2.1 認識Oracle的執行過程

2.2 Oracle優化法則---漏斗法則

2.3 Oracle 執行計劃

2.3.1 什麼是Oracle執行計劃

執行計劃是一條查詢語句在Oracle中執行過程或者訪問路徑的描述.

2.3.2 檢視Oracle執行計劃

1.執行計劃常用的列欄位解釋

基數:返回的結果集行數

位元組:執行該步驟後返回的位元組數

耗費(cust),CPU耗費:Oracle估計的該步驟的執行成本,用於說明SQL執行的代價,理論上越小越好.

2.3.3 看懂Oracle執行計劃

2.3.3.1執行順序

根據縮排來判斷,縮排最多的最先執行(縮排相同時,最上面的最先執行)

2.4 表的訪問方式

  • TABLE ACCESS FULL(全表掃描)
  • TABLE ACCESS BY ROWID(通過rowid的表存取)
  • TABLE ACCESS BY INDEX SCAN(索引掃描)

2.4.1 ABLE ACCESS FULL(全表掃描)

Oracle會讀取表中的所有行,並檢查是否滿足where語句中條件;

使用建議:資料量太大的表不建議全表掃描

2.4.2 TABLE ACCESS BY ROWID(通過ROWID的表存取)

ROWID的解釋:oracle會自動加在表的每一行的最後一列偽列,表中並不會物理儲存ROWID的值,一旦一行資料插入後,則其對應的ROWID在該行的生命週期內是唯一的,即使發生行遷移,該行的ROWID值也不變。

2.4.3 TABLE ACCESS BY INDEX SCAN(索引掃描)

在索引塊中即儲存每個索引的鍵值,也儲存具有該鍵值所對的ROWID.

索引的掃描分兩步:首先是找到索引所對的ROWID,其次通過ROWID讀取改行資料

索引掃描又分五種:

  • INDEX UNIQUE SCAN(索引唯一掃描)
  • INDEX RANGE SCAN(索引範圍掃描)
  • INDEX FULL SCAN(索引全掃描)
  • INDEX FAST FULL SCAN(索引快速掃描)
  • INDEX SKIP SCAN(索引跳躍掃描)

(a).INDEX UNIQUE SCAN(索引唯一掃描)

針對唯一性索引(UNIQUE INDEX)的掃描,每次至多隻返回一條記錄,主要針對該欄位為主鍵或者唯一;

(b). INDEX RANGE SCAN(索引範圍掃描)

使用一個索引存取多行資料;

發生索引範圍掃描的三種情況:

  • 在唯一索引列上使用了範圍操作符(如:>   <   <>   >=   <=   between)
  • 在組合索引上,只使用部分列進行查詢(查詢時必須包含前導列,否則會走全表掃描)
  • 對非唯一索引列上進行的任何查詢

(c). INDEX FULL SCAN(索引全掃描)

  • 進行全索引掃描時,查詢出的資料都必須從索引中可以直接得到

(d). INDEX FAST FULL SCAN(索引快速掃描)

  • 掃描索引中的所有的資料塊,與 INDEX FULL SCAN 類似,但是一個顯著的區別是它不對查詢出的資料進行排序(即資料不是以排序順序被返回)

(e). INDEX SKIP SCAN(索引跳躍掃描):

Oracle 9i後提供,有時候複合索引的前導列(索引包含的第一列)沒有在查詢語句中出現,oralce也會使用該複合索引,這時候就使用的INDEX SKIP SCAN;

當Oracle發現前導列的唯一值個數很少時,會將每個唯一值都作為常規掃描的入口,在此基礎上做一次查詢,最後合併這些查詢;

例如:

假設表emp有ename(僱員名稱)、job(職位名)、sex(性別)三個欄位,並且建立了如 create index idx_emp on emp (sex, ename, job) 的複合索引;

因為性別只有 '男' 和 '女' 兩個值,所以為了提高索引的利用率,Oracle可將這個複合索引拆成 ('男', ename, job),('女', ename, job) 這兩個複合索引;

當查詢 select * from emp where job = 'Programmer' 時,該查詢發出後:

Oracle先進入sex為'男'的入口,這時候使用到了 ('男', ename, job) 這條複合索引,查詢 job = 'Programmer' 的條目;

再進入sex為'女'的入口,這時候使用到了 ('女', ename, job) 這條複合索引,查詢 job = 'Programmer' 的條目;

最後合併查詢到的來自兩個入口的結果集。

2.5 Sql語句的處理過程

1.在共享池中查詢SQL語句

2.檢查語法

3.檢查語義和相關的許可權

4.合併(MERGE)檢視定義和子查詢

5.確定執行計劃

繫結(BIND):

1.在語句中查詢繫結變數

2.賦值(或重新賦值

執行(EXECUTE):

1.應用執行計劃

2.執行必要的I/O和排序操作

提取(FETCH):

1.從查詢結果中返回記錄

2.必要時進行排序

3.使用ARRAY FETCH機制

共享遊標:好處

1.減少解析

2.動態記憶體調整

3.提高記憶體使用率

2.5.1 Sql共享原理

Oracle將執行過程中的sql語句放在記憶體的共享池中,可以被所有的資料庫使用者共享到,當執行一條sql語句時,如果它和之前的sql執行語句完全相同時,oracle會快速獲取被解析的語句以及最好的執行路勁。

這塊系統屬於全域性的區域,但是oracle只對簡單的表提供快取記憶體,如果是多表的連線查詢,資料庫管理員必須在啟動引數檔案中為該區域設定合適的引數,增加共享的可能性。

2.5.2 Sql共享的條件(注意事項)

1.執行語句必須與共享池語句完全一樣,包括(大小寫,空格,換行等).

2.兩條語句所指的物件必須完全相同。

3.兩個SQL語句繫結變數的名字必須相同。

例子:字元級的比較

SELECT * FROM UR_USER_INFO

Select * from ur_user_info

例子:相同的繫結變數名

select pay_fee,pay_method from bal_payment_info where pay_sn= : pay_sn;

select pay_fee,pay_method from bal_payment_info where pay_sn= : pay_no;

繫結變數不一樣,不能共享。

2.5.3共享sql區域

2.5.4 Sql解析與共享sql語句

當一個Oracle例項接收一條sql後

1、Create a Cursor 建立遊標

2、Parse the Statement 分析語句

3、Describe Results of a Query 描述查詢的結果集

4、Define Output of a Query 定義查詢的輸出資料

5、Bind Any Variables 繫結變數

6、Parallelize the Statement 並行執行語句

7、Run the Statement 執行語句

8、Fetch Rows of a Query 取查詢出來的行

9、Close the Cursor 關閉遊標

2.6 繫結變數

2.6.1 重編譯問題

例如:

select  *from ur_user_info where contract_no = 32013484095139

下面這個語句每執行一次就需要在SHARE POOL 硬解析一

次,一百萬使用者就是一百萬次,消耗CPU和記憶體,如果業務

量大,很可能導致宕庫……

如果繫結變數,則只需要硬解析一次,重複呼叫即可

2.6.2 繫結變數解決重編譯問題

例如:

select  *from ur_user_info where contract_no = 32013484095139

select  *from ur_user_info where contract_no = 12013481213149

使用繫結變數

select  *from ur_user_info where contract_no =:contract_no

2.6.3 繫結變數注意事項

a、不要使用資料庫級的變數繫結引數cursor_sharing來強

制繫結,無論其值為 force 還是similar

b、有些帶> < 的語句繫結變數後可能導致優化器無法正確

使用索引

2.5 SQL優化遵循的原則及注意事項

  • 目標:

(1).SQL優化的一般性原則設計方面:

  • 設計方面:

(1).儘量依賴oracle的優化器,併為其提供條件;

(2).合適的索引,索引的雙重效應,列的選擇性;

  • 編碼方面:

(1).利用索引,避免大表FULL TABLE SCAN;

(2).合理使用臨時表;

(3).避免寫過於複雜的sql,不一定非要一個sql解決問題;

(4).在不影響業務的前提下減小事務的粒度;

2.5.1 IS NULL 與IS NOT NULL

任何sql語句只要在where語句後面新增is null或者is not null,那麼oracl優化器將不再使用索引。

2.5.2 使用帶萬用字元(%)的語句

列舉兩個例子說明該問題:

查詢ur_user_info表中phone_no帶10的服務號碼

例子1:Select *from ur_user_info where phone_no like ‘%10%’;

例子2:Select *from ur_user_info where phone_no like ‘10%’;

由於例1中萬用字元(%)在搜尋詞首出現,所以oracle系統不使用phone_no的索引,萬用字元會降低查詢的效率,但當萬用字元不再首出現,又能使用索引,如例2所示。

三.ORACLE語句優化規則

3.1 選擇最有效的表名順序

例如:TAB1 1000條記錄, TAB2 1條記錄

選擇記錄最少的作為基表

Select count(*) from tab1,tab2;

如果有3個或者3個以上的表則選擇交叉表作為基表

3.2 where字句中的連線順序

oracle的解析按照從上而下解析,因此表之間的連線必須寫在where條件之前:

例如:

低效率:

select .. from

             emp e

             where sal > 50000 and job = 'manager'

             and 25 < (select count(*) from emp where mgr=e.empno);

高效率:

select .. from

emp e

where 25 < (select count(*) from emp where mgr=e.empno)

             and sal > 50000

             and job = 'manager';

3.3 萬用字元’*’的使用

Sql在執行帶萬用字元的語句時,如果‘%’在首位,那麼在欄位上建立的主鍵或者索引將會失效!

應該避免類似語句的出現

Select name from user_info where name=’%A’;

3.4 使用truncate代替delete

當刪除表時,使用delete執行操作,回滾端用來存放可恢復的資訊,當沒有提交事務的時候,執行回滾事務,資料會恢復到執行delete操作之前,而當用truncate是,回滾端則不會存放可恢復的資訊,減少資源的呼叫。

3.5 用where字句替換HAVING字句

避免使用 HAVING 子句, HAVING 只會在檢索出所有記錄之後才對結果集進行過濾. 這個處理需要排序,總計等操作. 如果能通過 WHERE 子句限制記錄的數目,那就能減少這方面的開銷.

3.6 減少對錶的查詢

低效:

Select tab_name from tables where tab_name = ( select

tab_name from tab_columns where version = 604) and db_ver=

( select db_ver from tab_columns where version = 604)

高效:

select tab_name from tables where (tab_name,db_ver) =

( select tab_name,db_ver) from tab_columns where version =604)

3.7 用in代替or

低效:

Select.. from location where loc_id = 10 or loc_id = 20 or loc_id = 30

高效:

Select..from location where loc_in in (10,20,30);

3.8 刪除重複資料

最高效的刪除重複記錄的方法

Delete from ur_user_info a

     Where a.rowid>(select min(b.rowid)

              From ur_user_info b

         Where b. uid=a. uid);

3.9 避免使用耗費資源的操作

帶有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL語句會啟動SQL引擎執行耗費資源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要執行兩次排序.

例如,一個UNION查詢,其中每個查詢都帶有GROUP BY子句, GROUP BY會觸發嵌入排序(NESTED SORT) ; 這樣, 每個查詢需要執行一次排序, 然後在執行UNION時, 又一個唯一排序(SORT UNIQUE)操作被執行而且它只能在前面的嵌入排序結束後才能開始執行. 嵌入的排序的深度會大大影響查詢的效率.

3.10 自動選擇索引

如果表中有兩個以上(包括兩個)索引,其中有一個唯一性索引,而其他是非唯一性.在這種情況下,ORACLE將使用唯一性索引而完全忽略非唯一性索引.

舉例:

select ename from emp where empno = 2326  and deptno  = 20 ;這裡,只有empno上的索引是唯一性的,所以empno索引將用來檢索記錄.

table access by rowid on emp index unique scan on emp_no_idx;

3.11 至少要包含組合索引的第一列

如果索引是建立在多個列上, 只有在它的第一個列(leading column)被where子句引用時,優化器才會選擇使用該索引. 當僅引用索引的第二個列時,優化器使用了全表掃描而忽略了索引。

3.12 避免在索引列上使用函式

低效:

select ..

from dept

where sal * 12 > 25000;

高效:

select ..

from dept

where sal  > 25000/12;

3.13 避免出現索引列自動轉換

當比較不同資料型別的資料時, ORACLE自動對列進行簡單的型別轉換.

假設EMP_TYPE是一個字元型別的索引列.

select user_no,user_name,address

from user_files

where user_no = 109204421

這個語句被ORACLE轉換為:

select user_no,user_name,address

from user_files

where to_number(user_no) = 109204421因為內部發生的型別轉換, 這個索引將不會被用到!

3.14 避免出現索引列自動轉換

如用 :

where a.order_no = b.order_no

不用 :

where to_number (substr(a.order_no, instr(b.order_no, '.') - 1)

= to_number (substr(a.order_no, instr(b.order_no, '.') - 1)

3.15 使用DECODE來減少處理時間

例如:

select count(*) sum(sal)

   from emp

  where dept_no = 0020

and ename like 'smith%';

 select count(*) sum(sal)

   from emp

  where dept_no = 0030

    and ename like 'smith%';

你可以用DECODE函式高效地得到相同結果

select count(decode(dept_no, 0020, 'x', null)) d0020_count,

       count(decode(dept_no, 0030, 'x', null)) d0030_count,

       sum(decode(dept_no, 0020, sal, null)) d0020_sal,

       sum(decode(dept_no, 0030, sal, null)) d0030_sal

  from emp

 where ename like 'smith%';

3.16 減少對錶的查詢

 低效

 select tab_name

          from tables

          where tab_name = ( select tab_name

                                from tab_columns

                                where version = 604)

          and db_ver= ( select db_ver

                           from tab_columns

                           where version = 604)

   高效

 select tab_name

          from tables

          where  (tab_name,db_ver)

        = ( select tab_name,db_ver)

                   from tab_columns

                   where version = 604)  

3.17  Order by語句

(a).ORDER BY語句決定了Oracle如何將返回的查詢結果排序。Order by語句對要排序的列沒有什麼特別的限制,也可以將函式加入列中(象聯接或者附加等)。任何在Order by語句的非索引項或者有計算表示式都將降低查詢速度。

(b). order by語句以找出非索引項或者表示式,它們會降低效能。解決這個問題的辦法就是重寫order by語句以使用索引,也可以為所使用的列建立另外一個索引,同時應絕對避免在order by子句中使用表示式。

3.18 用索引提高效率

索引是表的一個概念部分,用來提高檢索資料的效率,ORACLE使用了一個複雜的自平衡B-tree結構. 通常,通過索引查詢資料比全表掃描要快. 當ORACLE找出執行查詢和Update語句的最佳路徑時, ORACLE優化器將使用索引. 同樣在聯結多個表時使用索引也可以提高效率. 另一個使用索引的好處是,它提供了主鍵(primary key)的唯一性驗證。通常, 在大型表中使用索引特別有效. 當然,你也會發現, 在掃描小表時,使用索引同樣能提高效率. 雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價. 索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時, 索引本身也會被修改. 這意味著每條記錄的INSERT , DELETE , UPDATE將為此多付出4 , 5 次的磁碟I/O . 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.。定期的重構索引是有必要的。

3.19 避免在索引列上使用計算

WHERE子句中,如果索引列是函式的一部分.優化器將不使用索引而使用全表掃描.

低效:

     SELECT … FROM  DEPT  WHERE SAL * 12 > 25000;

高效:

     SELECT … FROM DEPT WHERE SAL > 25000/12;

3.20 用>= 替代 >

如果DEPTNO上有一個索引。

  高效:

   SELECT *

   FROM EMP

   WHERE DEPTNO >=4

   低效:

   SELECT *

   FROM EMP

   WHERE DEPTNO >3

3.21 通過使用>=、<=等,避免使用NOT命令

例子:

select * from employee where salary <> 3000;

對這個查詢,可以改寫為不使用NOT:

select * from employee where salary<3000 or salary>3000;

雖然這兩種查詢的結果一樣,但是第二種查詢方案會比第一種查詢方案更快些。第二種查詢允許Oracle對salary列使用索引,而第一種查詢則不能使用索引。

3.22 字元型欄位的引號

比如有的表PHONE_NO欄位是CHAR型,而且建立有索引,

但在WHERE條件中忘記了加引號,就不會用到索引。

WHERE PHONE_NO=‘13920202022’

WHERE PHONE_NO=13920202022

四.優化總結

a.建立表的時候。應儘量建立主鍵,儘量根據實際需要調整資料表的PCTFREE和PCTUSED引數;大資料表刪除,用truncate table代替delete。

b. 合理使用索引,在OLTP應用中一張表的索引不要太多。資料重複量大的列不要建立二叉樹索引,可以採用點陣圖索引;組合索引的列順序儘量與查詢條件列順序保持一致;對於資料操作頻繁的表,索引需要定期重建,以減少失效的索引和碎片。

c.查詢儘量用確定的列名,少用*號。

select count(key)from tab where key> 0效能優於select count(*)from tab;

d. 儘量少巢狀子查詢,這種查詢會消耗大量的CPU資源;對於有比較多or運算的查詢,建議分成多個查詢,用union all聯結起來;多表查詢的查詢語句中,選擇最有效率的表名順序。Oracle解析器對錶解析從右到左,所以記錄少的表放在右邊。

e.儘量多用commit語句提交事務,可以及時釋放資源、解鎖、釋放日誌空間、減少管理花費;在頻繁的、效能要求比較高的資料操作中,儘量避免遠端訪問,如資料庫鏈等,訪問頻繁的表可以常駐記憶體:alter table...cache;

f.在Oracle中動態執行SQL,儘量用execute方式,不用dbms_sql包。

參考文獻

《Oracle SQL 語句優化》  2010 作者:Black_Snail

《基於Oracle的SQL優化典型案例分析》2013作者:dbsnake @dbsnake

相關推薦

一種基於優化的影象去噪方法演示

本文介紹一種基於凸優化的影象去噪方法。 該方法採用L1範數來衡量影象的平滑度,即能濾除澡聲,又能最大限度地儲存影象的邊緣。 模型如下:   其中f(x)為差分矩陣,存放了X每個元素與其4鄰域的差值。 I為輸入的灰度影象。 對於三通道彩色影象,可

論文: 基於智慧優化演算法的測試資料生成綜述

緣由:       最近一直在看智慧演算法,然後進行了在測試函式上的實驗,遇到問題。 (1)測試函式 不是現實的問題,單純的在測試函式 上進行一遍遍的比較,看不到具體的用途, 他的結果在我看來反應的 只是一個指標值。 這些測試函式只是一種評價的 指標(自己雖

Win10_ltsc_2019_x64整合DPO基於人工智慧優化可動態提高應用程式效能提升高達394%

Win10_ltsc_2019_x64整合DPO基於人工智慧優化可動態提高應用程式效能提升高達394% 一、znwinx64en2019ltsc.iso 典型安裝版 4.2G 1、基於MSDN cn_windows_10_enterprise_ltsc_2019_x64 企業版本精

【規劃】基於Frenet優化軌跡的無人車動作規劃方法

動作規劃動作在無人車規劃模組的最底層,它負責根據當前配置和目標配置生成一序列的動作,我們前面討論的三次樣條插值實際上只是一個簡單的路徑,而非我們最終能夠執行的軌跡,本文介紹一種基於Frenet座標系的優化軌跡動作規劃方法,該方法在高速情況下的高階車道保持和無人駕駛都

python資料分析:商品資料化運營(中)——基於引數優化的Gradient Boosting的銷售預測

本案例需要使用超引數交叉檢驗和優化方法GridSearchCV以及整合迴歸方法GradientBoostingRegressor GridSearchCV與GradientBoostingRegressor GridSearchCV GridSearchCV用於系統地遍歷多種

Hive-如何基於分割槽優化

最近一直做系統優化,但從建模的角度今天有個小優化,原理比較簡單,效果可能不是很大,但很有意思。 這種優化的好處是不用改變sql程式碼,對使用者是透明的。 所以分享下。 - 由於hive在檔案基礎上,而會全部掃一個分割槽裡面的內容。 hive表的概念是基於hadoop的檔案系統

無人駕駛汽車系統入門(二十一)——基於Frenet優化軌跡的無人車動作規劃方法

動作規劃動作在無人車規劃模組的最底層,它負責根據當前配置和目標配置生成一序列的動作,我們前面討論的三次樣條插值實際上只是一個簡單的路徑,而非我們最終能夠執行的軌跡,本文介紹一種基於Frenet座標系的優化軌跡動作規劃方法,該方法在高速情況下的高階車道保持和

基於優化的Prim,另附kruskal解法

最小生成樹的Prim演算法也是貪心演算法的一大經典應用。Prim演算法的特點是時刻維護一棵樹,演算法不斷加邊,加的過程始終是一棵樹。 Prim演算法過程: 一條邊一條邊地加, 維護一棵樹。 初始 E = {}空集合, V = {任意節點} 迴圈(n –

一次基於Vue.Js的用戶體驗優化

cursor har class 點擊 words script vuejs 計算 point .mytitle { background: #2B6695; color: white; font-family: "微軟雅黑", "宋體", "黑體", Arial; fon

基於對象職責明確原則優化程序

學員 readline convert ssid namespace sqlhelper res ask demo 學習了如何編寫通用數據訪問類SQLHelper,在此基礎上還可以繼續優化程序,基於對象職責明確原則,將程序封裝成學生數據信息訪問類、班級信息訪問類、成績信息訪

崔華基於oracle的SQL優化讀書筆記(一)如何得到真實的執行計劃

hash mes getting binary oracl only 中文 fun roc ---恢復內容開始--- 得到目標SQL的執行計劃,大致有以下四種方式: 1.explain plan 命令 2.DBMS_XPLAN包 3.SQLPLUS中的autotrace開關

將一個基於磁盤的表遷移到SQL Server中的一個內存優化的表

varchar 並發 ken 希望 重要 資源管理器 limited com arc 本文是微軟的譯文,對應的原文是:https://www.red-gate.com/simple-talk/sql/database-administration/migrating-dis

基於貝葉斯優化的超參數tuning

science tuning pos tps ted ati hyper targe div https://arimo.com/data-science/2016/bayesian-optimization-hyperparameter-tuning/ 貝葉斯優化

Apache Spark 2.2中基於成本的優化器(CBO)(轉載)

ons roc art 3.4 post tinc ner sort 重排序 Apache Spark 2.2最近引入了高級的基於成本的優化器框架用於收集並均衡不同的列數據的統計工作 (例如., 基(cardinality)、唯一值的數量、空值、最大最小值、平均/最大長度,

基於CommonsChunkPlugin,webpack打包優化

affect emp epc ace extract 前端 創建 ring 關聯關系 前段時間一直在基於webpack進行前端資源包的瘦身。在項目中基於路由進行代碼分離,http://www.cnblogs.com/legu/p/7251562.html。但是打包的文件

基於成本的優化--CBO-------v$SQL視圖

V$SQL 優化 SQL語句 詳解v$SQL視圖 查詢消耗磁盤I/O最多的SQL語句 select sql_text,executions,disk_reads from v$sql where disk_reads>&number order by di

基於成本的優化--CBO

優化 CBO SQL語句 執行計劃 選擇CBO的優化方式 默認條件下,CBO將SQL語句的吞吐量作為優化目標 三種不同的優化方式 ALL_ROWS :該優化方式是Oracle的默認模式,優化目標是實現查詢的最大吞吐量 FIRST_ROWS_n:該優化方式使用CBO的

基於多級緩存的充電系統優化實踐

n) 解決 清理 moni 組織 超時時間 microsoft ole rim 基於多級緩存的充電系統優化實踐 原文是發表在文章中,剛看了下文章主要用於轉載,因此在隨筆中重新發布一下。 摘要 正如前文中《海量並發下充電業務優化實踐》所述,在充電過程中由於涉及到大量的實時數據

轉://從一條巨慢SQL看基於Oracle的SQL優化

查看 針對性 map 分區 有關 需要 fix pts 大局觀 http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的內容是基於Oracle的SQL優化,以一條巨慢的SQL為例,從快速解讀SQL執行計劃、如何從執行計劃中

AI開發者福音!阿裏雲推出國內首個基於英偉達NGC的GPU優化容器

人工智能 算法 容器 摘要: 3月28日,在2018雲棲大會·深圳峰會上,阿裏雲宣布與英偉達GPU 雲 合作 (NGC),開發者可以在雲市場下載NVIDIA GPU 雲鏡像和運行NGC 容器,來使用阿裏雲上的NVIDIA GPU計算平臺。 阿裏雲推出國內首個基於英偉達NGC的GPU優化容器 3月2