云和恩墨技術(shù)通訊2024年12月月刊_第1頁
云和恩墨技術(shù)通訊2024年12月月刊_第2頁
云和恩墨技術(shù)通訊2024年12月月刊_第3頁
云和恩墨技術(shù)通訊2024年12月月刊_第4頁
云和恩墨技術(shù)通訊2024年12月月刊_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

@@@ :enmoxzs@ $g:service001@iIVw8%:hr@?L@ T: marketing@J@ s$.3§)S:400-660-8755第2頁第2頁親愛的客戶:為了及時(shí)共享行業(yè)案例,通知共性問題,達(dá)成共享和提前預(yù)防,以及共同學(xué)習(xí)國產(chǎn)數(shù)據(jù)庫,我們整理和編輯了《云和恩墨技術(shù)通訊》,通過對過去一段時(shí)間的知識回顧,故障歸納,以期提供有價(jià)值的信息供大家參考。同時(shí),我們也希望能夠?qū)狳c(diǎn)事件、新的產(chǎn)品特性及其他有價(jià)值的信息聚集起來,為您提供具有前瞻性的支持信息,保持對于當(dāng)前最新的數(shù)據(jù)庫新聞和事件的了解,其中包括重要數(shù)據(jù)庫產(chǎn)品發(fā)布、警報(bào)、更新、新版本、補(bǔ)丁等。目錄※觀點(diǎn):2024年12月中國數(shù)據(jù)庫排行榜解讀知識:MySQL8.0I/O優(yōu)化參數(shù)※經(jīng)驗(yàn):從參數(shù)和數(shù)據(jù)字典的變化來看MogDB5.20引入的新特性※故障:PostgreSQL里vacuum成功執(zhí)行但是無法回收死元組的原因※知識:MogDB圖形化開發(fā)工具M(jìn)ogeaver使用方法看這一篇就夠了※經(jīng)驗(yàn):PostgreSQL數(shù)據(jù)庫表膨脹的一些原因※經(jīng)驗(yàn):OracleXTTS實(shí)施前的檢查項(xiàng)※經(jīng)驗(yàn):讀已提交隔離模式下的事務(wù)行為測試※公告:智能問答助手小墨v0.11版本發(fā)布2024年12月中國數(shù)據(jù)庫排行榜:群雄競逐顯風(fēng)采,GoldenDB文/墨天輪編輯部2640點(diǎn)本期榜單中的亮點(diǎn)表現(xiàn)與關(guān)鍵變化。2024OanBaseolarDB前三甲的位置也不斷迎來新晉挑戰(zhàn)者。在最新一期的榜單中,GoldenDB升前三,openGauss與TDSQL出現(xiàn)了位次調(diào)整,其他產(chǎn)品也在不斷沉淀與創(chuàng)新中激發(fā)出新的動力。一、GoldenDB排名再升奪探花,老牌產(chǎn)品風(fēng)采依舊地位堅(jiān)隨著廠商在技術(shù)創(chuàng)新、產(chǎn)品優(yōu)化和市場拓展方面的持續(xù)投入,年末榜單呈現(xiàn)出更加激烈的競爭態(tài)勢。尤其值640一同盤點(diǎn)本期榜單中的亮點(diǎn)表現(xiàn)與關(guān)鍵變化。圖1:排行榜前五名得分情況OanBase710.49,進(jìn)一步鞏固了其在數(shù)據(jù)庫領(lǐng)域的領(lǐng)導(dǎo)地位。116ResearchForresterWaveTranslyticalDataPlatformsQ42024》報(bào)告中,OceanBase借其一體化產(chǎn)品戰(zhàn)略首次入選“競爭者”象限,成為報(bào)告中僅有的兩家中國數(shù)據(jù)庫公司之一。這一成就不僅OceanBase在全球事務(wù)分析型數(shù)據(jù)平臺市場的突破,還彰顯了其在技術(shù)創(chuàng)新與市場競爭力上的持續(xù)提升。?值得一提的是,本次報(bào)告中,PingCAPTiDB588.94OanBaseTiDB斷走向全球化。2OceanBaseTiDBForresterWaveTranslyticalDataPlatformsQ42024》競爭者象限PolarDB688.84,繼續(xù)穩(wěn)步表現(xiàn)。1129PolarDB+PostgreSQL動(北京站)正式開啟,為技術(shù)愛好者和行業(yè)專家提供了深入的學(xué)習(xí)與交流機(jī)會,進(jìn)一步展示了olarDBGoldenDB668.51GoldenDB806強(qiáng)一致、高性能、高可靠、高兼容、云原生、易運(yùn)維等多個(gè)關(guān)鍵技術(shù)領(lǐng)域。這些技術(shù)專利為其在復(fù)雜應(yīng)用場景中的表現(xiàn)提供了強(qiáng)有力的保障,尤其是在金融、運(yùn)營商等行業(yè)的核心業(yè)務(wù)系統(tǒng)中,展現(xiàn)了卓越的性能與穩(wěn)定性。目前,GoldenDB一步證明了其技術(shù)創(chuàng)新的成熟與市場的高度認(rèn)可。GaussDBGaussDB930GaussDB?在本月數(shù)據(jù)庫排行榜中,金倉、南大及達(dá)夢三家老牌國產(chǎn)數(shù)據(jù)庫繼續(xù)憑借卓越的表現(xiàn)穩(wěn)固其在行業(yè)中的領(lǐng)9021術(shù)和應(yīng)用領(lǐng)域形成了深厚的競爭優(yōu)勢。金倉數(shù)據(jù)庫成功中標(biāo)慈溪市政府采購30KingbaseESV8KingbaseESV9容性、性能管理和安全性等方面取得了顯著提升。GBase則憑借在河北機(jī)場管理集團(tuán)和山東移動等重點(diǎn)項(xiàng)目中的中標(biāo),進(jìn)一步拓展了在航空和通信行業(yè)的市場份額。通過與大量渠道商和產(chǎn)業(yè)鏈上下游企業(yè)的合作,達(dá)夢數(shù)據(jù)庫在兼容適配、技術(shù)服務(wù)與人才培養(yǎng)方面持續(xù)推進(jìn),為行業(yè)發(fā)展提供了堅(jiān)實(shí)的支持。本月金倉數(shù)據(jù)庫以技術(shù)升級與市場深耕為核心,GBASE通過行業(yè)突破與重點(diǎn)項(xiàng)目實(shí)現(xiàn)持續(xù)增長,達(dá)夢則以生態(tài)合作和人才培育為支撐,三者各顯其能,穩(wěn)固了在國產(chǎn)數(shù)據(jù)庫領(lǐng)域的核心地位。openGauss469.72openGauss續(xù)推動技術(shù)創(chuàng)新與生態(tài)建設(shè)。openGauss在上海社區(qū)聯(lián)合云和恩墨與鼎捷數(shù)智共同舉辦了關(guān)于國產(chǎn)軟件如何助力企業(yè)高質(zhì)量數(shù)智化發(fā)展的討論會。此次活動不僅展示了openGauss在數(shù)據(jù)庫領(lǐng)域的技術(shù)優(yōu)勢,也為企業(yè)在數(shù)字化轉(zhuǎn)型過程中提供了寶貴的實(shí)踐經(jīng)驗(yàn)。?排在第十的是騰訊云1118TDSQL中標(biāo)。期待在未來的行業(yè)應(yīng)用中,TDSQL圖3:排名第六至十位得分情況二、榜單爭鋒,數(shù)據(jù)庫產(chǎn)品顯身手在最新的數(shù)據(jù)庫排行榜前五十名中,不僅有諸多成熟企業(yè)穩(wěn)步前行,更涌現(xiàn)出一些技術(shù)沉淀深厚、持續(xù)創(chuàng)新的創(chuàng)業(yè)公司。隨著技術(shù)的不斷演進(jìn)和市場需求的快速變化,我們可以看到,榜單中的這些產(chǎn)品正在通過深厚的技術(shù)積累和持續(xù)的創(chuàng)新驅(qū)動,推動整個(gè)數(shù)據(jù)庫行業(yè)向更高水平邁進(jìn)。圖4:榜單前五十位表現(xiàn)亮眼產(chǎn)品得分情況DolphinDB242024)》中,2016DolphinDBOP10?同樣成立于2016yliene,本月排名上升931AacheKylin作為領(lǐng)先的開源大OLAPHadoop/SarkBI20218KyligenceKylin4.0,簡化了部署架構(gòu),并邁出了向云原生方向發(fā)展的堅(jiān)實(shí)一步。MatrixOne391030v2.0.0AI據(jù)訪問、全文檢索和向量檢索性能的優(yōu)化。MtriOne202152024Pre-AMatrixOne三個(gè)產(chǎn)品分別來自不同的創(chuàng)業(yè)公司,盡管成立時(shí)間不長,但它們通過不同的創(chuàng)新路徑,在數(shù)據(jù)庫行業(yè)中迅速嶄露頭角。DolphinDB聚焦數(shù)字金融領(lǐng)域,KyligenceMatrixOneAI?本月榜單中,TaurusDB的排名引人注目。作為華為自研的新一代企業(yè)級分布式數(shù)據(jù)庫,TaurusDB完全兼MySQL,提供高擴(kuò)展海量存儲解決方案。依托華為DFV存儲技術(shù),TaurusDB采用計(jì)算存儲分離架構(gòu),支115128TBV2.020241?梧桐數(shù)據(jù)庫是中移動信息技術(shù)有限公司(中國移動集團(tuán)大數(shù)據(jù)中心)打造的一款分布式OLAP數(shù)據(jù)庫,本50現(xiàn)向量化計(jì)算引擎提供極速數(shù)據(jù)分析能力,提供云原生部署和彈性伸縮能力,可以幫助企業(yè)用戶輕松構(gòu)建核心數(shù)倉、數(shù)據(jù)集市、實(shí)時(shí)數(shù)倉以及湖倉一體數(shù)據(jù)平臺。三、小結(jié),,2025數(shù)據(jù)庫領(lǐng)域的發(fā)展勢頭將愈加強(qiáng)勁。知識:MySQL8.0之I/O優(yōu)化參數(shù)文/崔虎龍?jiān)贛ySQLInnoDBInnoDBIO例如從緩沖池中刷新臟頁,以及將更改從更改緩沖區(qū)寫入適當(dāng)?shù)亩壦饕?,日志體系刷新。如:binlogedo、undoMySQLIOIOIO現(xiàn)瓶頸。MySQLIOIO詢響應(yīng)時(shí)間慢、寫入操作緩慢或者服務(wù)器負(fù)載高。IOMySQL++++++++++++++++++1rowinset,1warning(0.00sec)||12|tester|localhost|test|Query| 0|Waitingforhandlercommit|insert...+++++++++||db |Command|Time|State|Info|Id|User|Host##SHOWPROCESSLIST中Status狀態(tài)mysql>SHOWPROCESSLIST;+++++++++##錯誤日志[ERROR][FATAL]InnoDB:fsync()returnedEIO,aborting.##錯誤日志[ERROR]InnoDB:TryingtodoI/Otoatablespacewhichdoesnotexist.I/Otype:read,page:[pageid:space=32,pagenumber=57890],I/Olength:16384bytes。##錯誤日志[ERROR]InnoDB:Error:io_setup()failedwithEAGAINafter5attempts.InnoDB:YoucandisableLinuxNativeAIObysettinginnodb_use_native_aio=0inf##錯誤日志[ERROR][FATAL]InnoDB:Semaphorewaithaslasted>600seconds.Weintentionallycrashtheserverbecauseitappearstobehung.MySQLIOIO引起:頻繁的讀寫操作:查詢、插入、更新、刪除等導(dǎo)致大量磁盤讀寫。IOI/O,I/O。IOIOMySQLIO優(yōu)化參數(shù)針對MySQLIOinnodb_purge_threads(1~32)SQLInnoDBInnoDBUndo(MVCC)或回滾不再需要該purgemysql>SHOWENGINEINNODBSTATUS\G...TRANSACTIONSTrxidcounter403479Purgedonefortrx'sn:o<403478undon:o<0state:runningbutidleHistorylistlength104SHOWENGINEINNODBTRANSACTIONSmysql>SHOWENGINEINNODBSTATUS\G...TRANSACTIONSTrxidcounter403479Purgedonefortrx'sn:o<403478undon:o<0state:runningbutidleHistorylistlength10建議小于CPU核數(shù),按照經(jīng)驗(yàn)保證在4~16。innodb_flush_neighbors指定從InnoDB緩沖池中刷新一個(gè)頁面是否也會刷新相同范圍內(nèi)的其他臟頁面。MySQL數(shù)據(jù)操作(tablespace->segment->extent(64個(gè)page,1M)->page)0:在相同(sameextent)范圍內(nèi)的臟頁不會被刷新。1:在相同(sameextent)的范圍內(nèi)刷新連續(xù)的臟頁。2:在相同(sameextent)的范圍內(nèi)刷新臟頁。備注:在老式的存儲設(shè)備上時(shí)(HDD,SAA),與在不同時(shí)間刷新單個(gè)頁面相比,在一次操作中刷新這樣的相鄰頁面減少了IO(主要用于磁盤尋道操作SD建IO0innodb_lru_scan_depth(默認(rèn)值1024,100~2*32-1)InnoDBLRUinnodb_lru_san_depth*innodb_buffer_pool_instances建議:當(dāng)IO壓力大時(shí),改成512值。備注:innodb_flush_neighbors和innodb_lru_scan_depth參數(shù)主要用于寫密集型工作負(fù)載。在DML活動頻繁的情況下,如果沖洗不夠積極,則可能會落后;如果沖洗過于積極,則磁盤寫入可能會使I/O容量飽和。innodb_read_io_threads&innodb_write_io_threads(1~64)InnoDBIOinnodb_ad_io_thadsinnodb_wrie_io_thadsIO256IOSHWENGINEinnodbTSIOthadmysql>SHOWENGINEINNODBSTATUS\Gmysql>SHOWENGINEINNODBSTATUS\G...FILEI/OI/Othread0state:waitingforcompletedaiorequests(insertbufferthread)I/Othread1state:waitingforcompletedaiorequests(readthread)I/Othread2state:waitingforcompletedaiorequests(readthread)I/Othread3state:waitingforcompletedaiorequests(readthread)I/Othread4state:waitingforcompletedaiorequests(readthread)I/Othread5state:waitingforcompletedaiorequests(writethread)I/Othread6state:waitingforcompletedaiorequests(writethread)I/Othread7state:waitingforcompletedaiorequests(writethread)I/Othread8state:waitingforcompletedaiorequests(writethread)Pendingnormalaioreads:[0,0,0,0],aiowrites:[0,0,0,0],ibufaioreads:Pendingflushes(fsync)log:0;bufferpool:01154OSfilereads,480OSfilewrites,83OSfsyncs0.00reads/s,0avgbytes/read,0.00writes/s,0.00fsyncs/s0.00reads/s,0avgbytes/read,0.00writes/s,0.00fsyncs/sIO816IO,CPU核數(shù)。innodb_use_native_aioInnoDBLinuxIOLinux如果InnoDBtmpdirtmpfstmpfs上AIO的Linux則此選項(xiàng)也可能在啟動期間自動禁用。建議:當(dāng)IO壓力大時(shí),改成0值。一般在同一臺服務(wù)器機(jī)器上運(yùn)行多個(gè)這樣的實(shí)例,可能會超出Linux系統(tǒng)的容量限制。如錯誤信息里:EAGAIN:Thespecifiedmaxeventsexceedstheuser'slimitofavailableevents.EAGAIN:Thespecifiedmaxeventsexceedstheuser'slimitofavailableevents.可以通過向/proc/sys/fs/aio-max-nr寫入更高的限制來解決此錯誤。InnoDBtmpdirtmpfstmpfsAIOLinuxinnodb_adaptive_hash_indexMySQL中自適應(yīng)哈希是MySQL內(nèi)部維護(hù)的哈希堆表。當(dāng)數(shù)據(jù)更改變更時(shí),因?yàn)橛行?shù)據(jù)駐扎在自適應(yīng)哈希堆表里,同時(shí)要處理自適應(yīng)哈希表,有可能會導(dǎo)致I/O等待時(shí)間過長,影響整體MySQL服務(wù)響應(yīng)。建議:關(guān)閉自適應(yīng)哈希。7.sync_binlog0:禁止MySQL服務(wù)器將二進(jìn)制日志同步到磁盤。有操作系統(tǒng)控制刷新binlog文件。1binlog產(chǎn)生負(fù)面影響。在電源故障或操作系統(tǒng)崩潰的情況下,binlogbinlogNN01Nbinlogbinlog統(tǒng)崩潰的情況下,服務(wù)器可能已提交未刷新到二進(jìn)制日志的事務(wù)。值越高,性能越好,但數(shù)據(jù)丟失的風(fēng)險(xiǎn)也會增加??梢园凑諏?shí)際負(fù)載IO情況進(jìn)行調(diào)整。建議:可以按照IO情況設(shè)置100~1000值。innodb_flush_log_at_trx_commitInnoDB(flush)的重做日志信息(redolog)InnoDBACID屬性中的持久性(Duability)的關(guān)鍵因素。當(dāng)數(shù)據(jù)庫發(fā)生故障,如崩潰或者斷電,這項(xiàng)設(shè)置可以保護(hù)您的數(shù)據(jù)不會丟失。備注:0和2值未刷新日志的事務(wù)可能會在崩潰中丟失。IO0binloginnodb_io_capacityinnodb_io_capacity_maxInnodbIO操作數(shù)(IOS),maxIOS對于單個(gè)常規(guī)磁盤驅(qū)動器sas,建議設(shè)置在200到400之間。對于高端的總線連接SSD,考慮更高的設(shè)置,如2500對于不同的硬盤可以按照如下設(shè)置:SAS200~1000SAS200~1000,SSD2000~5000,PCI-E10000-50000IOPSinnodb_flush_methodInnoDBRedologUnix:Win系統(tǒng)::LinuxIOfsyncO_DYNCio_ctaiQi..0beiib_log_file_sieinnodblog_file_in_goup)重做日志文件所占用的磁盤空間量,有32InnoDBBufer日志緩沖區(qū)(innodb_Log_buffer_size參數(shù)大?。﹥?nèi)容會定期刷新到磁盤。更大的innodb_Log_buffer_size和Redo文件使大事務(wù)無需在事務(wù)提交之前將重做日志數(shù)據(jù)寫入磁盤。因此,如果有更新、插入或刪除許多行的事務(wù),那么增加日志緩沖區(qū)的大小可以節(jié)省磁盤I/O。建議:innodb_Log_buffer_size的大小>innodb_redo_log_capacity的單個(gè)文件,最好2倍的大小。知識點(diǎn)IOLinuxAIO(AsynchonousIO)/不需要等待操作完成就可以繼續(xù)執(zhí)行其他任務(wù)。AIOO操作的程序來說非常重要。在一個(gè)程序中如果涉及到磁盤的IO操作時(shí),有兩種情況:IOCPU(IOCPUIdleaiting狀態(tài))。IOCPU(CPUIO)。CPUCPU,IO。第二種情況更有利于CPUIO(asynchronousIO)#文件提供了系統(tǒng)范圍異步I/O請求現(xiàn)在的數(shù)目shell#cat/proc/sys/fs/aio-max-nr65536#文件是所允許的并發(fā)請求的最大個(gè)數(shù)。shell#cat/proc/sys/fs/aio-nr在Linux系統(tǒng)中,查看異步I/O情況如下,有一個(gè)參數(shù)叫做aio-#文件提供了系統(tǒng)范圍異步I/O請求現(xiàn)在的數(shù)目shell#cat/proc/sys/fs/aio-max-nr65536#文件是所允許的并發(fā)請求的最大個(gè)數(shù)。shell#cat/proc/sys/fs/aio-nr23052305如下設(shè)置:echo"fs.aio-max-nr=65535">>/etc/sysctl.confsysctl-pecho"fs.aio-max-nr=65535">>/etc/sysctl.confsysctl-p刷新數(shù)據(jù)方式fsyncfsync制將緩沖區(qū)中的數(shù)據(jù)寫入磁盤,從而避免因?yàn)橄到y(tǒng)崩潰或其他原因?qū)е碌臄?shù)據(jù)丟失。fsync數(shù)據(jù)已經(jīng)保存好了。fsync文件的更新時(shí)間,訪問時(shí)間,長度等。dasyncfsync類似,兩者的區(qū)別是,dasync是否需要刷新文件的元數(shù)據(jù),是要看元數(shù)據(jù)的變化部分是否對之后的讀取有影響,比如文件元數(shù)據(jù)的訪問時(shí)t_timet_mtimedasynct_sie數(shù)據(jù)數(shù)據(jù)到存儲設(shè)備。O_DYNCwriedasync。O_DIRECT,IOIO用于傳遞數(shù)據(jù)的緩沖區(qū),其內(nèi)存邊界必須對齊為塊大小的整數(shù)倍數(shù)據(jù)傳輸?shù)拈_始點(diǎn),即文件和設(shè)備的偏移量,必須是塊大小的整數(shù)倍EINVAL經(jīng)驗(yàn):從參數(shù)和數(shù)據(jù)字典的變化來看MogDB5.2.0引入的新特性文/王勇昱一、前言MogDB5.2.0930MogDB5.0Oracle了非常大的提升,官方說法是新增了九十多項(xiàng)兼容性,但作為整個(gè)版本的全程親歷者,我知道新增的遠(yuǎn)遠(yuǎn)不止九十多項(xiàng),因?yàn)橛行┬」δ芎喜⒊闪艘粋€(gè)大功能,還有一些點(diǎn)當(dāng)成是對已有功能的優(yōu)化沒算進(jìn)來。如果全部打散成一個(gè)個(gè)小的功能點(diǎn),應(yīng)該是超過兩百項(xiàng)的!功能點(diǎn)的個(gè)數(shù),可能還不太有感覺,換個(gè)說法吧。某個(gè)應(yīng)用軟件具有以下特征:Oracleuser_sourcePL/SQL有數(shù)千個(gè)表和數(shù)千個(gè)自定義類型user_dependenciesJADMLseletobjet詢數(shù)據(jù)也是通過存儲過程返回游標(biāo)WindowstsqlplussqlldrcmdSQL這樣的應(yīng)用軟件,MogDB5.2.0OaclePL/SQL像這樣超多的兼容性引入,分散在各個(gè)細(xì)節(jié)里,一篇文章根本無法說完,本篇僅從數(shù)據(jù)庫參數(shù)和數(shù)據(jù)字典的一些變化,來說說這些比較明顯的新特性。二、pg_settingMogDB5.0.6MogDB5.2.0pg_settingMogDB5.2.0下列表al_ittcein_eodering先來看原生PG(14)postgres=#postgres=#3.9999999999999999(2rows)4|3|1.3333333333333333|0.999999999999999999991|1.3333333333333333|1|0|0|0.3333333333333333|0.33333333333333333333|c/3*3+++++-|a/3*3|b/3*3|c/3|b/3a/3|postgres=#createtablet_test(aint,bfloat,cnumeric);insertintot_testvalues(1,1,1);insertintot_testvalues(4,4,4);CREATETABLEINSERT01INSERT01postgres=#selecta/3"a/3",b/3"b/3",c/3"c/3",a/3*3"a/3*3",b/3*3"b/3*3",c/3*3"c/3*3"fromt_test;這個(gè)用例中暴露了原生PG中很多問題整型除以整型返回整型,導(dǎo)致丟失了小數(shù)點(diǎn),1/3=0,openGaussnumeric的除法,在整數(shù)部分是否大于0時(shí),保留的小數(shù)位數(shù)不一樣(MogDB5.2.0已解決,見參數(shù)fixed_numeric_scale)numeric的乘除法的結(jié)果不滿足交換律c/3*3<>c*3/3,因?yàn)樗菑淖蟮接翼樞蜻M(jìn)行計(jì)算的,而且由于內(nèi)核固定了精度位數(shù),導(dǎo)致除法除不盡后必然會有丟失,再乘回來就不是之前的那個(gè)數(shù)了。非精確數(shù)的float在金融行業(yè)中,有時(shí)候會用到trunceil這樣的函數(shù)對數(shù)值進(jìn)行舍尾取整,上面這個(gè)例子就會得到trunc(1/3*3)=0PGPG是數(shù)據(jù)庫的問題,而是使用者的用法的問題。MogDB5.2.0引入了allow_arithmetic_operation_reordering這個(gè)參數(shù),讓numeric類型的乘除法,先計(jì)算testdb=#setallow_arithmetic_operation_reorderingtoon;SETtestdb=#setallow_arithmetic_operation_reorderingtoon;SETtestdb=#createtablet_test(aint,bfloat,cnumeric);CREATETABLEtestdb=#insertintot_testvalues(1,1,1);INSERT01testdb=#insertintot_testvalues(4,4,4);INSERT01testdb=#selecttestdb-#a/3"a/3",b/3"b/3",c/3"c/3",testdb-#a/3*3"a/3*3",b/3*3"b/3*3",c/3*3"c/3*3"testdb-#fromt_test;a/3|b/3|c/3|a/3*3|b/3*3|c/3*3+++++testdb=#.333333333333333|.333333333333333|.33333333333333333333|1|1|11.33333333333333|1.33333333333333|1.3333333333333333|4|4|4(2rows)fixed_numeric_scale上面說了numeric的乘除交換怎么解決的,再來說說除法的小數(shù)位數(shù)怎么處理。先看原生PG里這個(gè)例子++++sum(a)/3|sum(a/3)sum(a)|postgres=#createtablet_test1(anumeric);insertintot_test1values(1);insertintot_test1values(5);CREATETABLEINSERT01INSERT01postgres=#selectsum(a)"sum(a)",sum(a/3)"sum(a/3)",sum(a)/3"sum(a)/3"fromt_test1;6|2.00000000000000003333|2.00000000000000006|2.00000000000000003333|2.0000000000000000(1row)postgres=#postgres=#selecta/3"a/3"fromt_test1;a/30.333333333333333333331.6666666666666667(2rows)4postgres=#selecta/3"a/3"fromt_test1;a/30.333333333333333333331.6666666666666667(2rows)在原生PG中,numeric0,20424如果第一個(gè)有效數(shù)值是個(gè)位,那么小數(shù)位數(shù)為16;第一個(gè)有效位數(shù)在萬位,那么小數(shù)位數(shù)為12位;postgres=#select100000::numeric/3postgres=#select100000::numeric/3unionallselect10000::numeric/3unionallselectunionallselect100::numeric/3unionallselectunionallselectunionallselect0.1::numeric/3unionallselectunionallselect0.001::numeric/3unionallselect0.0001::numeric/3select0.0001::numeric/3;n33333.3333333333333333.3333333333333333333.333333333333333333.33333333333333333.33333333333333330.333333333333333333330.033333333333333333330.003333333333333333330.000333333333333333330.000033333333333333333333(10rows)postgres=#大概可以這么理解,PG的處理方式是讓這個(gè)數(shù)的有效數(shù)值位數(shù)不低于16位,最大20位,所以可以看到這個(gè)162044、8、16、20、這樣的情況。只是除一下當(dāng)成最終結(jié)果也沒問題,但一旦還要把除之后的東西再加起來,這個(gè)結(jié)果和Oracle的差異就遠(yuǎn)了。所以MogDB5.2引入了一個(gè)fixed_numeric_scale參數(shù),可以固定numeric除法后的小數(shù)位數(shù)testdb=#setfixed_numeric_scale=40;testdb=#setfixed_numeric_scale=40;SETtestdb=#createtablet_test1(anumeric);CREATETABLEtestdb=#insertintot_test1values(1);INSERT01testdb=#insertintot_test1values(5);INSERT01testdb=#selecttestdb-#sum(a)"sum(a)",testdb-#sum(a/3)"sum(a/3)",testdb-#sum(a)/3"sum(a)/3"testdb-#fromt_test1;sum(a)|sum(a/3)|sum(a)/3++(1row)(1row)22|6|enable_cache_function_result/function_result_cache_max_memopenGaussOacleOracleresult_cachecreatefunctionget_first_name(i_idnumber)returnvarchar2deterministicisretvarchar2(200);beginselecth.first_nameintoretfromhr.employeeshwhereh.employee_id=i_id;returnret;end;/selectt.*,get_first_name(t.employee_id)first_namefromhr.job_historyt;MogDB5.2deterministic/immutable/stableenable_ache_funtioncreatefunctionget_first_name(i_idnumber)returnvarchar2deterministicisretvarchar2(200);beginselecth.first_nameintoretfromhr.employeeshwhereh.employee_id=i_id;returnret;end;/selectt.*,get_first_name(t.employee_id)first_namefromhr.job_historyt;該功能使用的最大緩存大小,可以通過參數(shù)function_result_cache_max_mem進(jìn)行配置。緩存的使用情況,在sqlFunctionResultCache(查詢gs_session_memory_detail)pg_systimestampnextval|--會話1openGauss=#createsequenceseq_testcache10;CREATESEQUENCEopenGauss=#selectseq_test.nextval,systimestamp;eaPl_seh會話級緩存,這樣會導(dǎo)致pg_systimestampnextval|--會話1openGauss=#createsequenceseq_testcache10;CREATESEQUENCEopenGauss=#selectseq_test.nextval,systimestamp;++1|2024-10-0716:12:47.746282+08(1row)openGauss=#selectseq_test.nextval,systimestamp;nextval|pg_systimestamp+openGauss=#selectseq_test.nextval,systimestamp;nextval|pg_systimestamp+2|2024-10-0716:12:49.85297+08(1row)--會話2openGauss=#selectseq_test.nextval,systimestamp;--會話2openGauss=#selectseq_test.nextval,systimestamp;nextval|pg_systimestamp+11|2024-10-0716:12:57.211623+08(1row)openGauss=#selectseq_test.nextval,systimestamp;nextval|pg_systimestamp+openGauss=#selectseq_test.nextval,systimestamp;nextval|pg_systimestamp+12|2024-10-0716:12:59.512341+08(1row)--會話1openGauss=#selectseq_test.nextval,systimestamp;--會話1openGauss=#selectseq_test.nextval,systimestamp;nextval|pg_systimestamp+3|2024-10-0716:13:02.689327+08(1row)會話2沒有從緩存里取到3,而是重新自己申請了緩存,從11開始,不同會話間出現(xiàn)了跳號;并且3出現(xiàn)的時(shí)間點(diǎn)比11出現(xiàn)的時(shí)間點(diǎn)要靠后。在openGauss官方文檔里有這么一段不建議同時(shí)定義cache和maxvalue或minvaluecache造成序列號段浪費(fèi)設(shè)置cache會產(chǎn)生空洞,可以理解,但這與maxvalue和minvalue有什么關(guān)系?就算不設(shè)置maxvalue和minvalue,也會設(shè)置個(gè)默認(rèn)值上去。之前特意問過openGauss社區(qū),也沒人能給出說明。所以文檔里這個(gè)建議,我們暫時(shí)不管。合理設(shè)置序列的緩存,是可以帶來明顯的性能提升的。我們曾測過典型場景下,cache11,5%~10%,MogDBenable_global_sequence_cache--會話1testdb=#showenable_global_sequence_cache;enable_global_sequence_cacheon(1row)testdb=#createsequenceseq_testcache10;CREATESEQUENCEtestdb=#selectseq_test.nextval,systimestamp;nextval| pg_systimestamp+1|2024-10-0716:34:40.692146+08(1row)testdb=#selectseq_test.nextval,systimestamp;nextval| pg_systimestamp+2|2024-10-0716:34:43.788491+08(1row)2testdb=#selectseq_test.nextval,systimestamp;nextval| pg_systimestamp+3|2024-10-0716:34:59.168467+08(1row)testdb=#selectseq_test.nextval,systimestamp;nextval| pg_systimestamp+4|2024-10-0716:35:02.590096+08++5|2024-10-0716:35:06.595963+08(1row)pg_systimestampnextval|--會話1testdb=#selectseq_test.nextval,systimestamp;(1row)enable_Oracle_comment在Oracle中,經(jīng)常有人喜歡這么寫注釋createorreplacepackagepkg_testascreateorreplacepackagepkg_testas/***************************/*功能:test/*作者:xxx/*創(chuàng)建日期:19xx-xx-xx/*變更記錄:****************************/functionfun_test;end;PG/oGPG/oG/**/select/*select/*注釋1/*注釋2*/注釋3*/1afrompg_database;OacleOacle釋的結(jié)尾即認(rèn)為整段注釋完成了。于是兩者出現(xiàn)了絕對不可同時(shí)兼容的沖突。testdb=#showenable_Oracle_comment;enable_Oracle_commentOacle里的這種注釋能原樣在MogDB中使用,又還能支持之前的行為,MogDBenable_Oacle_ommentSQL時(shí)區(qū)分注釋風(fēng)格;并且新增了客戶端的參數(shù),用于控制客戶端的預(yù)解析行為(gsqlPGCOMMENT=Oracle,mogeaverCstylecomment)testdb=#showenable_Oracle_comment;enable_Oracle_commentonon(1row)testdb=#select/*1/*2*/1afroma1111(4rows)enable_plsql_compiledependopenGauss6.0PL/SQLacae/procedure/function,但是配置成了一個(gè)會話級參數(shù)behavior_compat_options=plpgsql_dependency,經(jīng)過我們的大量驗(yàn)證,如果反復(fù)開關(guān)這個(gè)參數(shù),容易引起依賴關(guān)系混亂,因此MogDB將這個(gè)參數(shù)從會話級參數(shù)中postmasterPG12funtion,如果入?yún)⑹且粋€(gè)自定義類型,那funtionfuntionfuntion的代碼也不會寫入數(shù)據(jù)字典。而在Oraclefunctionfunction只是該對象狀態(tài)為失效,等后續(xù)缺失的自定義類型創(chuàng)建后,再編譯,即可變?yōu)橛行?。openGauss6.0/MogDB5.2新增的這個(gè)功能,實(shí)現(xiàn)了Oracle創(chuàng)建PL/SQL對象無視依賴順序的效果,可以先創(chuàng)建,再編譯,也可以查到對象的生效失效狀態(tài)(pg_object.valid)。enable_plsql_ddl_auto_commitcreatetabletest_cursor_truncate(anumber);insertintotest_cursor_truncatevalues(1);declarecursorcselect*fromtest_cursor_truncate;xint;PGoGDDLOacleDDL會在該語句的前后都自動進(jìn)行一次隱式提交??瓷先ミ@個(gè)點(diǎn)并不影響多少兼容性,頂多就是將提交后置了,可能會由于未及時(shí)提交而產(chǎn)生一些鎖而已。但是PG/oG中存在一個(gè)限制,如果一個(gè)表已經(jīng)被游標(biāo)打開,那么這個(gè)表將不能進(jìn)行truncatecreatetabletest_cursor_truncate(anumber);insertintotest_cursor_truncatevalues(1);declarecursorcselect*fromtest_cursor_truncate;xint;beginbeginopenc;loopfetchcintox;exitwhenc%notfound;endloop;executeimmediate'truncatetabletest_cursor_truncate';end;/ERROR:cannotTRUNCATE“test_cursor_truncate”becauseitisbeingusedbyactivequeriesinthissession其實(shí)解決這個(gè)報(bào)錯有很多種方式,比如從游標(biāo)本身著手,但是MogDBOacle的機(jī)制,認(rèn)為實(shí)現(xiàn)DDL的自提交才是解決這個(gè)問題的更好的方式。不過需要注意的是,本次新增的參數(shù),作用范圍僅限在PL/SQLexecuteSQL。enable_plsql_return_hold_cursorogSQLopenGauss設(shè)置為非自動提交,否則會出現(xiàn)報(bào)錯ERROR:cursor“<unnamedportal1>”doesnotexistogSQLopenGausscommit在原生PGcommitOracleholdOacleholdMogDBenable_plsql_return_hold_cursorenable_select_multi_object_into這個(gè)比較簡單,就只是為了支持一種用法,select兩個(gè)構(gòu)造into到兩個(gè)變量createtypetp1asobject(aint);createtypetp2asobject(aint);createtypetp1asobject(aint);createtypetp2asobject(aint);declarep1tp1;p2tp2;beginp2tp2;beginselecttp1(a),tp2(a)intop1,p2fromt;end;PG/oGrowtype)selectintorowtype上面這個(gè)例子卻在一個(gè)行里并排出現(xiàn)了兩個(gè)行,導(dǎo)致出現(xiàn)沖突。因此MogDBenable_selet_multi_object_intooG/Oracleenable_sqlcode_intopenGaussAsqlodeOaclesqlcode,或者進(jìn)行了值范圍的判斷,則會報(bào)錯,而MogDBenable_sqlcode_int這個(gè)參數(shù),sqlcodeOraclesqlcodeCREATEORREPLACEPACKAGEPKGTESTISRESOURCE_BUSYEXCEPTION;PRAGMAEXCEPTION_INIT(RESOURCE_BUSY,-54);ENDPKGTEST;OacleOacleCREATEORREPLACEPACKAGEPKGTESTISRESOURCE_BUSYEXCEPTION;PRAGMAEXCEPTION_INIT(RESOURCE_BUSY,-54);ENDPKGTEST;openGauss-54Oacle中是一個(gè)內(nèi)置的錯誤碼,顯然不會和openGaussMogDBsqlodeOracleMogDBenable_global_plsql_cache/plsql_global_cache_*PG/oGPLSQL編譯一次再執(zhí)行,性能下降非常嚴(yán)重。除此之外,我們還驗(yàn)證了典型的一百萬行存儲過程,如果在一個(gè)會話package),PL/SQL5GB,如果有一百,總共就是500GB500GB不能用于干其他活!MogDBgloalplsqlacheplsqlPLSQLgloalplsqlache門介紹一下這個(gè)功能。其他還剩下幾個(gè)參數(shù),與Oracle兼容性本身關(guān)系不大,本篇暫不展開。三、behavior_compat_optionsbehavior_compat_options是一個(gè)有非常多兼容性選項(xiàng)的集合參數(shù),MogDB5.2除了有直接新增一些獨(dú)立的guc參數(shù)之外,在behavior_compat_options里也增加了一些選項(xiàng)。MogDB以真實(shí)的大型Oracle應(yīng)用進(jìn)行了長時(shí)間的業(yè)務(wù)測試,得到了以下的組合。openGaussMogDBOracle四、plsql_compile_check_options這個(gè)參數(shù)和behavior_compat_optionsMogDB5.2bind_procedure_public_searchpathsearch_path設(shè)置為該存儲過程當(dāng)前的schemapublic。原本不設(shè)置時(shí),存儲過程內(nèi)部的sach_th只會有存儲過程當(dāng)前的schema,沒有public,public五、數(shù)據(jù)字典MogDB5.2MogDB5.0.6pg_class/pg_attribute也可以窺見一些功能MogDB5.2owidMogDB5.2rowid六、總結(jié)MogDB5.2OacleOraclePG/oG于兩邊表現(xiàn)不一致的,使用參數(shù)開關(guān)來進(jìn)行切換,這樣才能確保不僅僅是創(chuàng)建成功,還可以確保執(zhí)行成功以及結(jié)果的正確性。(MogDB5.2MEShtps://supportenmechom/)故障:PostgreSQL里vacuum成功執(zhí)行但是無法回收死元組的原因文/閻書利PostgreSQL數(shù)據(jù)庫里的vacuum/autvacuumvacuum被阻塞,acuumacuumogSQLacuum失效復(fù)制槽復(fù)制槽會保留那些在主庫上已經(jīng)被刪除或更新的元組,直到備庫確認(rèn)已經(jīng)接收到這些元組的所有變更。這種機(jī)制確保了數(shù)據(jù)的一致性和完整性,但也意味著在某些情況下,死元組不會被立即清理,從而導(dǎo)致表的膨脹和存儲空間的浪費(fèi)。select*frompg_replication_slots;//select*frompg_replication_slots;//刪除失效的復(fù)制槽SELECTpg_drop_replication_slot('slot_name');如果數(shù)據(jù)庫中存在長時(shí)間運(yùn)行的事務(wù),VACUUMVACUUM務(wù)仍在訪問那些它試圖清理的行。如果有一個(gè)長事務(wù)存在,那長事務(wù)時(shí)間的其它表也沒辦法Vacuum,因?yàn)樗淮_認(rèn)你是否會查其它表。PostgreSQL(databasehorizon)xminUUMxminVACUUM////根據(jù)事物開啟時(shí)間排序SELECTdatname,usename,query,xact_start,now()-xact_startxact_duration,query_start,query_start,now()-query_startquery_duration,FROMpg_stat_activityWHEREstate<>$$idle$$AND(backend_xidisNOTnullORbackend_xminisNOTnull)ANDpid!=pg_backend_pid()ORDERBYxact_startDESC;//大于30min的長事務(wù)SELECTdatname,usename,query,xact_start,now()-xact_startxact_duration,query_start,now()-query_startquery_duration,FROMpg_stat_activityWHEREstate<>$$idle$$AND(backend_xidisNOTnullORbackend_xminisNOTnull)ANDnow()-xact_start>interval$$30min$$ORDERBYxact_start;prepareSELECTgid,prepared,owner,database,transactionFROMpg_prepared_xactsORDERBYage(transaction)DESC;//大于30min的預(yù)處理語句SELECTname,statement,prepare_time,now()-prepare_time,parameter_types,from_sqlVACUUMSELECTgid,prepared,owner,database,transactionFROMpg_prepared_xactsORDERBYage(transaction)DESC;//大于30min的預(yù)處理語句SELECTname,statement,prepare_time,now()-prepare_time,parameter_types,from_sqlFROMpg_prepared_statementsFROMpg_prepared_statementsWHEREnow()-prepare_time>interval$$30ORDERBYprepare_timeDESC;idleintransactionselet*fompg_t_ativitywheee='idleintansation';VACUUMVACUUMVACUUM函數(shù)等內(nèi)部結(jié)構(gòu)涉及到表的訪問函數(shù)等內(nèi)部結(jié)構(gòu)涉及到表的訪問,可以通過pg_locks去間接驗(yàn)證。select*frompg_lockswhererelation='select*frompg_lockswhererelation='表名'::regclass;hot_standby_feedbackhot_standby_feedback參數(shù)打開,備庫將向主庫通報(bào)最舊的打開事務(wù),并且主數(shù)據(jù)庫上的VACUUM不會刪除備用數(shù)據(jù)庫上仍需要的舊行版本。設(shè)置hot_standby_feedback參數(shù)之后備庫會定期向主庫通知最小活躍事務(wù)id(xmin)值,這樣使得主庫vacuum進(jìn)程不會清理大于xmin值的事務(wù)。索引狀態(tài)問題selectindexrelid::regclass,indrelid::regclass,indisvalid,indisready,indislivefrompg_indexwhereindisvalid='f';VACUUM處理表的死元組時(shí)也會掃描索引。如果索引存在問題或者不一致,可能導(dǎo)致死元組無法被清理。解決方案:確保索引狀態(tài),如不正常考慮重建索引。selectindexrelid::regclass,indrelid::regclass,indisvalid,indisready,indislivefrompg_indexwhereindisvalid='f';表和索引的并發(fā)訪問如果表和索引正在被其他并發(fā)操作訪問,可能會導(dǎo)致VACUUM無法完全清理死元組。select*frompg_stat_activitywherequerylike'%select*frompg_stat_activitywherequerylike'%表名%'ANDpid!=pg_backend_pid();知識:MogDB圖形化開發(fā)工具M(jìn)ogeaver使用方法看這一篇就夠了文/王勇昱前言關(guān)于MogeaverMogeaverDBeaver,DBeaverCommunityEditionASL礎(chǔ)上,進(jìn)行了二次開發(fā)和封裝,支持對于MogDB數(shù)據(jù)庫的圖形化開發(fā)及管理,支持通過圖形化的方式創(chuàng)建,修改,調(diào)試數(shù)據(jù)庫內(nèi)的存儲過程,自定義函數(shù),及包。為什么選擇Mogeaver多平臺支持macOSIntelmacOSAppleSiliconWindows,包括但不限于Windows10Windows11Linux,openEuler,KylinLinux,UOS,Ubuntu,CentOS兼容MogDB/openGauss的特性支持創(chuàng)建數(shù)據(jù)庫選擇不同的兼容模式(A,B,PG)MogDB數(shù)據(jù)庫角色(role)Large(MogDB3.0)支持管理分區(qū)表(PartitionTable)支持管理數(shù)據(jù)庫內(nèi)任務(wù)(Job)BLOBCLOB支持圖形化調(diào)試MogDBdbe_pldebugger支持?jǐn)帱c(diǎn)調(diào)試和單步調(diào)試支持查看調(diào)試中變量值實(shí)時(shí)變化支持定位并跳轉(zhuǎn)至準(zhǔn)確的代碼報(bào)錯位置版本說明Mogeaver23.3.1hps/ocs.mod.io/zh/modb/v5.0/moave-elase-nes一、界面布局說明Mogeaver窗口包含菜單欄、工具欄、一個(gè)或多個(gè)編輯器和視圖的工作區(qū)以及狀態(tài)欄Mogeaver窗口包含菜單欄、工具欄、一個(gè)或多個(gè)編輯器和視圖的工作區(qū)以及狀態(tài)欄1.菜單欄默認(rèn)情況下,菜單欄包含以下菜單:(File)ER的菜單項(xiàng)。Edit(Navigate(SearchSQL(SQLEditorSQL數(shù)據(jù)庫(Database(WindowDBeaver//欄、分割編輯器以及管理其他首選項(xiàng)。(Help您可以自定義菜單欄和要顯示的菜單項(xiàng)列表;為此,請轉(zhuǎn)到窗口(Window)->(uomiePerspective(MenuVisibility含最基本和最常用命令的按鈕:的左側(cè)和右側(cè)各有一個(gè)快捷欄。快捷欄托管視圖和編輯器的快捷方式,如果至少有一個(gè)視圖或編輯器最小化,則會顯示,否則它們會隱藏作區(qū)內(nèi)的窗口,提供信息的展示和導(dǎo)航方式。/列表圖標(biāo),該圖標(biāo)還表示它們的數(shù)量:幾個(gè)視圖和編輯器可以同時(shí)在工作區(qū)打開,但一次只能有一個(gè)處于活動狀態(tài)。您可以通過打開和關(guān)閉視圖、將它們??吭诠ぷ鲄^(qū)的不同位置、將它們折疊到快捷欄或擴(kuò)展它們以占據(jù)整個(gè)工作區(qū)并將它們恢復(fù)到最新的??课恢脕砀墓ぷ鲄^(qū)的布局。二、連接新建數(shù)據(jù)庫連接選擇MogDB數(shù)據(jù)庫選擇MogDB數(shù)據(jù)庫填寫主機(jī)地址、端口、數(shù)據(jù)庫名、用戶名、密碼,填寫主機(jī)地址、端口、數(shù)據(jù)庫名、用戶名、密碼,點(diǎn)擊測試連接,出現(xiàn)下圖表示連接正常點(diǎn)擊Finish完成連接創(chuàng)建述MogDB3.切換當(dāng)前SQL窗口連接的數(shù)據(jù)庫和schema.dstopt會輸出到控制臺(pldsqldeveloper是自動執(zhí)行了一下dbms_output.enable)MogDBDBMS然后執(zhí)行dbms_output.put_line,即可在輸出窗口中看到dbms_output的輸出信息CverpostgresqlORACLECMogDB5.2.0ORCLEMoaver也新增一個(gè)選項(xiàng),用于切換注釋MogDBEnableCStyleComment開關(guān)的對比效果如下開關(guān)的對比效果如下注意該選項(xiàng)需要配合數(shù)據(jù)庫的enable_oracle_comment參數(shù)使用三、數(shù)據(jù)庫導(dǎo)航數(shù)據(jù)庫導(dǎo)航器是用于處理數(shù)據(jù)庫結(jié)構(gòu)和內(nèi)容的主視圖。查看對象列表按名稱過濾對象查看四、對象屬性屬性DDL數(shù)據(jù)(只有表和視圖有)五、SQL編輯器要開始使用SQL編輯器,您有幾種選擇:1.通過數(shù)據(jù)庫導(dǎo)航器:視圖中導(dǎo)航到所需的數(shù)據(jù)庫連接。F4SQLSQL腳本,或者右鍵單擊連接并從上下文菜單中選擇打開2.會出現(xiàn)一個(gè)選擇SQL腳本。 SQL2.會出現(xiàn)一個(gè)選擇?右鍵單擊您的數(shù)據(jù)庫連接打開最近的SQL腳本: ,并從上下文菜單中選擇SQL編輯器->最近的SQL腳本,或從主菜單中選擇SQL編輯器->最近的SQL腳本?;蛘咴赱數(shù)據(jù)庫導(dǎo)航器]視圖中使用Ctrl+Enter快捷鍵。?右鍵單擊您的數(shù)據(jù)庫連接3.會出現(xiàn)一個(gè)選擇SQL腳本窗口。單擊任何腳本以在新選項(xiàng)卡中打開它。3.在主菜單中導(dǎo)航到SQLSQLSQLF3在主菜單中導(dǎo)航到注意:連接的SQL編輯器與表或視圖的SQL控制臺不同。與控制臺不同,它可以保存腳本及其所做的更改。您可以在腳本文件夾中的[項(xiàng)目資源管理器]視圖中看到所有已保存的SQL腳本。S.Q面板、工具欄和結(jié)果面板。提示:您可以按Alt+Enter或右鍵單擊并導(dǎo)航到首選項(xiàng)來打開SQL編輯器首選項(xiàng)。3.gle選擇)SQLBlockSelection,開啟后,鼠標(biāo)在3.gle選擇)SQLBlockSelection,開啟后,鼠標(biāo)在輸入 -Keys可以輸入菜單名稱進(jìn)行過濾,在Bindingaler+shift+AWhen,SQL下文toUpperCasetoLowerCaseQSQL-5使用方式舉例:在SQL編輯器中輸入sf,然后按鍵盤的tab鍵S.查看器:-Appearance-Colorsandfonts-DbeaverFonts-Monospacefont工具欄中的會展示該SQL窗口執(zhí)行過的SQL及相關(guān)執(zhí)行信息會展示該SQL窗口執(zhí)行過的SQL及相關(guān)執(zhí)行信息注意該SL注意該

SQL編輯器的工具欄中的按鈕無法識別/為語句分隔符QLShowLineNumbersEditorsShowLineNumbers,該方法為全局開啟.LSL根據(jù)需要勾選相關(guān)的選項(xiàng),點(diǎn)擊提交注意如果勾選了ANALYSE,SQL會真實(shí)執(zhí)行一次L器的工具欄中的raisenotice、raisewarningdbms_outputLGoTheError(注SQLSQL調(diào)用的存儲過程內(nèi)部的錯誤)e,行它報(bào)錯信息顯示PL/pgSQLPL/pgSQLfunctionpkg_test.p1()line6atPERFORM在位置:PL/pgSQLfunctionline5atassignmentSQLstatement"CALLp2()"ERROR:invalidinputsyntaxfortypenumeric:"a"ERRORERROR,invalidinputsyntaxfortypenumeric"a;在位置:PL/pgSQLfunctionpkg_test.p2(line5pkg_test.p2(5pkg_test.p2(PL/pgSQLfunctionpkg_test.p1(line6,pkg_test.p1(6我們可以打開這個(gè)package的p1和p2,根據(jù)行號找到對應(yīng)的位置Moaveracaepoedueacaeprocedurepackage六、數(shù)據(jù)查看/編輯器1.日期時(shí)間格式/,Mogeaver3提交執(zhí)行存儲過程,鼠標(biāo)選中需要查看的游標(biāo)名稱,右側(cè)即可顯示游標(biāo)內(nèi)的數(shù)據(jù):點(diǎn)擊數(shù)據(jù)查看器下面的導(dǎo)出數(shù)據(jù)Excel如果點(diǎn)擊導(dǎo)出數(shù)據(jù),則會彈出導(dǎo)出選項(xiàng),可以選擇需要導(dǎo)出的文件格式導(dǎo)出方法二:在查詢的數(shù)據(jù)上鼠標(biāo)右鍵-高級復(fù)制,此時(shí)會復(fù)制到操作系統(tǒng)剪貼板,可以粘貼到其他文本中。這在生成json/markdown格式數(shù)據(jù)時(shí)很方便。導(dǎo)出方法三:在查詢的數(shù)據(jù)上鼠標(biāo)右鍵-生成SQL,可以快速生成對應(yīng)數(shù)據(jù)的insert語句,方便測試時(shí)復(fù)制數(shù)據(jù)到其他環(huán)境導(dǎo)出方法四:在數(shù)據(jù)庫導(dǎo)航中,表上也可以點(diǎn)擊鼠標(biāo)右鍵,選擇導(dǎo)出數(shù)據(jù)或生成SQL,操作和前面幾種方法一致后直接編輯單元格內(nèi)的數(shù)據(jù),保存即可注意在本機(jī)通過執(zhí)行SQL的方式創(chuàng)建的表,moaver中的元數(shù)據(jù)不會立即更新,如果出現(xiàn)查詢的數(shù)據(jù)為readonly?.trl+cOK七、調(diào)試packagepackage這個(gè)存儲過程切換到源點(diǎn)擊上方工具欄的瓢蟲按鈕輸入?yún)?shù)(若有),點(diǎn)擊OK,進(jìn)入調(diào)試此時(shí)可以進(jìn)行添加斷點(diǎn)、單步執(zhí)行、單步進(jìn)入、查看變量、執(zhí)行到最后等操作詳細(xì)請參考演示視頻:https://www.bilibili.com/video/BV1vw4m1Q7LM?.時(shí)未加單引號,導(dǎo)致語法錯誤否則可能會被認(rèn)為是字段名或?qū)ο竺氨緛砜梢哉{(diào)試的存儲過程在沒有進(jìn)行任何修改情況下無法進(jìn)行調(diào)試了MoaverMoaver緩存未成功更新(比如有占用)。這兩種情況都可以通過刪除本地緩存的元數(shù)據(jù)目錄解決。在Windows上的路徑是C:\Users\{用戶名}\AppData\Roaming\MogeaverData\workspace6\.metadata八、其他,slvvrSQL作系統(tǒng)的默認(rèn)打開方式中的軟件。Mogeaver*.pckEditors-FileAssociations*.pckSQL此時(shí)拖動pck文件到mogeaver中,即可自動創(chuàng)建一個(gè)SQL編輯器窗口打開這個(gè)文件

vr除舊版本程序目錄,啟動新版本程序即可,但某些情況下,Mogeaver的java緩存可能更新異常,因此建議在變更Mogeaver版本時(shí),手動刪除以下目錄C:\Users\{C:\Users\{用戶名}\AppData\Roaming\MogeaverData\workspace6\.metadata是會話同時(shí)登錄,此時(shí)多個(gè)操作系統(tǒng)會話不能同時(shí)打開Moaver文件被占用。此時(shí)可以通過以下方式解決:moaveee,-datadata1,mogeaver,data1data1據(jù)的jaa要經(jīng)常重啟軟件才可以繼續(xù)操作。moave.ini(注意操作系統(tǒng)本身可用內(nèi)存)-Xms64m-Xms64m-Xmx1024m重啟mogeaver生效某mSl沒moaver別來記錄更詳細(xì)的日志moave.ini-Ddbeaver.jdbc.trace=true-Ddbeaver.jdbc.trace=true重啟mogeaver生效,之后日志會生成在以下目錄中C:\Users\{C:\Users\{用戶名}\AppData\Roaming\MogeaverData\workspace6\.metadata.LSL編多條語句,或者寫了一段plsql代碼,然后光標(biāo)在隨機(jī)位置,直接點(diǎn)擊執(zhí)行單條語句按鈕。根據(jù)plsqldeveloperSQL語句全執(zhí)行了,但是在MoaverSQL。因此一般建議用鼠標(biāo)選定單個(gè)語句后執(zhí)行。,由管理員預(yù)先在堡壘機(jī)系統(tǒng)中配置好連接,將連接直接授權(quán)給堡壘機(jī)用戶,可以減少密碼泄露的風(fēng)險(xiǎn),也有利于對密碼進(jìn)行統(tǒng)一管理。一般堡壘機(jī)對于應(yīng)用程序的支持,只要應(yīng)用程序支持命令行啟動即可,Mogeaver也可以支持命令行啟動。mogeaver-con"driver=MogDB|url=jdbc:opengauss://34:26200/testdb|user=system|password=oracle|save=famogeaver-con"driver=MogDB|url=jdbc:opengauss://34:26200/testdb|user=system|password=oracle|save=false|name=mogdb_node1"-datatmpdatax_6yinv10Moaverwget/mogeaver/23.3.1/mogeaver-ce-23.3.1-linux.gtk.x86_64.tar.gzwget/mogeaver/23.3.1/mogeaver-ce-23.3.1-linux.gtk.x86_64.tar.gzwget/kunpeng/archive/compiler/bisheng_jdk/bisheng-jre-17.0.11-linux-x64.tar.gztar-xfmogeaver-ce-23.1.1-linux.gtk.x86_64.tar.gzmkdirmogeaver/jretar-xfbisheng-jre-17.0.11-linux-x64.tar.gz-Cmogeaver/jre--strip-components1#啟動(也可以在文件管理器中雙擊mogeaver啟動)mogeaver/mogeaverarm64環(huán)境介質(zhì)下載地址htps:/dn-modenmechom/moave/23.3.1/moave-e-23.3.1-linux.gtk.aach64a.z/kunpeng/archive/compiler/bisheng_jdk/bisheng-jre-17.0.11-linux-aarch64.tar.gz?0.oalinv10deb,并且添加簽名。本人已打包好一個(gè)UOS桌面x86_64版本的Mogeaver,帶簽名,已上傳到網(wǎng)盤,下載后可雙擊deb包進(jìn)行安裝:/share/init?surl=8axPwThaFMvb8XYmijff5g&pwd=mjej.Maeraa界面修改的,就不會自動刷新,關(guān)閉對象重新再打開也不會刷新,包括本機(jī)用SQL語句的方式直接執(zhí)行DDL操作也不會刷新,需要手動刷新數(shù)據(jù)庫導(dǎo)航列表。23.3.1acaeacaepackagepackagepackage來經(jīng)驗(yàn):PostgreSQL數(shù)據(jù)庫表膨脹的一些原因文/閻書利PostgreSQLdeadtuple提供能重用的空間,二是數(shù)據(jù)頁之間存在空閑空間。表的填充因子設(shè)置表的填充因子是個(gè)很神奇的東西,因?yàn)樵O(shè)置太大或者太小,都可能因不同原因引

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論