當前位置:首頁 » 數據倉庫 » linux內存資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

linux內存資料庫

發布時間: 2022-09-03 10:07:20

⑴ linux安裝oracle12資料庫設置內存時報錯

圖形界面出不來;
在root下面執行:
xhost +
再su過去oracle用戶安裝。

⑵ h2資料庫在linux伺服器怎麼使用

簡單來說就是用jdbc:h2:mem:h2db來建立內存模式,並建表, 然後jdbc:h2:tcp://192.168.20.141:8082/mem:h2db來訪問上面的內存資料庫 package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; imp...

⑶ Linux裡面什麼是數據持久化

數據持久化顧名思義就是把程序中的數據以某種形式保存到某存貯介質中,以達到持久化的目的。當程序運行時,一些數據是臨時保存在內存中,一旦退出系統,這些數據就丟失了。那麼,使用某種手段將數據保存在硬碟上或者資料庫中,這樣即使退出系統後又重新啟動系統,那麼這些數據仍然可以重新找回來。


例如管理員向一個用戶管理系統中添加了一個用戶的資料,那麼這個系統需要將新添加的資料保存到資料庫中,否則系統退出或者電腦重啟後該用戶資料就會丟失。將數據從內存保存到資料庫中,這便是數據的持久化。當然,資料庫只是持久化方式中的一種,也可以保存在其他的永久存貯介質中。

圖為數據持久化的過程示意圖。


持久化(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁碟)。持久化的主要應用是將內存中的對象存儲在資料庫中,或者存儲在磁碟文件中、XML數據文件中等等。

持久化是將程序數據在持久狀態和瞬時狀態間轉換的機制。

DBC就是一種持久化機制。文件IO也是一種持久化機制。

日常持久化的方法

在一定周期內保持不變就是持久化,持久化是針對時間來說的。資料庫中的數據就是持久化了的數據,只要你不去刪除或修改。比如在瀏覽器中一次Session會話中Session對象變數也是不變的,是Session容器中持久化。對象持久化的方式有很多種,根據周期不同有,page,Session,Application。對象序列化機制對於需要將對象的狀態保存到文件中,而後能夠通過讀入對象狀態來重新構造對象,恢復程序狀態. 對象序列化的過程是對象持久化的方法之一,把對象保存到文件中。

簡單的理解持久化可以在二個層面:應用層和系統層、

應用層

如果關閉(shutdown)你的應用然後重新啟動則先前的數據依然存在。

系統層

如果關閉(shutdown)你的系統(電腦)然後重新啟動則先前的數據依然存在。

持久化是一種對象服務實現至少3個介面

,就是把內存中的對象保存到外存中,讓以後能夠取回。需要實現至少3個介面:

void Save(object o) 把一個對象保存到外存中

Object Load(object oid) 通過對象標識從外存中取回對象

boolExists(object oid) 檢查外存中是否存在某個對象.

類似概念序列化

我們先跳開一下,看看另一個類似的有用概念:序列化Serialize也是一種對象服務,就是把內存中的對象序列化成流、或者把流反序列化成對象。需要實現2個介面:

void Serialize(Stream stream,object o) 把對象序列化到流中

object Deserialize(Stream stream) 把流反序列化成對象

序列化和持久化很相似,有些人甚至混為一談,其實還是有區別的,序列化是為了解決對象的傳輸問題,傳輸可以在線程之間、進程之間、內存外存之間、主機之間進行。我之所以在這里提到序列化,是因為我們可以利用序列化來輔助持久化,可以說凡是可以持久化的對象都可以序列化,因為序列化相對容易一些(也不是很容易),所以主流的軟體基礎設施,比如.net和java,已經把序列化的框架完成了。

持久化方案可以分為關系資料庫方案、文件方案、對象資料庫方案、xml資料庫方案

現今主流的持久化方案是關系資料庫方案,

關系資料庫方案不僅解決了並發的問題,更重要的是,關系資料庫還提供了持久化服務之外的價值:統計分析功能。剛才我說到,凡是可以序列化的對象都可以持久化,極端的說,我們可以只建立一個表Object(OID,Bytes),但基本上沒有人這么做,因為一旦這樣,我們就失去了關系資料庫額外的統計分析功能。關系資料庫和面向對象之間有一條鴻溝,因為二者模式不匹配,所以就存在一個OR映射問題。


Redis支持兩種數據持久化方式:rdb方式和aof方式。前者會根據配置的規則定時將內存中的數據持久化到硬碟上,後者則是在每次執行寫命令之後將命令記錄下來。兩種持久化方式可以單獨使用,但是通常會將兩者結合使用。

1、RDB方式

RDB方式的持久化是通過快照的方式完成的。當符合某種規則時,會將內存中的數據全量生成一份副本存儲到硬碟上,這個過程稱作」快照」,redis默認開啟該持久化功能,具體配置如下:

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename mp.rdb

#文件名稱

dir ./

#rdb文件存放路徑

配置後系統會自動進行快照,save 60 10000表示60秒內有10000次寫入,那麼就會調用bgsave

除了系統自動進行快照外,我們也可以手動執行SAVE或BGSAVE命令主動進行快照操作:

執行SAVE或BGSAVE命令

執行FLUSHALL命令

2、AOF方式

在使用Redis存儲非臨時數據時,一般都需要打開AOF持久化來降低進程終止導致的數據丟失,AOF可以將Redis執行的每一條寫命令追加到硬碟文件中,這一過程會降低Redis的性能。

默認情況下,Redis沒有開啟AOF(append only file)持久化功能,可以通過在配置文件中作如下配置啟用:

appendonly no #是否開啟aof,開啟時將no改為yes

appendfilename "appendonly.aof" 持久化文件名稱

auto-aof-rewrite-percentage 100

#當前AOF文件大小是上次日誌重寫得到AOF文件大小的二倍時,自動啟動新的日誌重寫過程。

auto-aof-rewrite-min-size 64mb

#當前AOF文件啟動新的日誌重寫過程的最小值,避免剛剛啟動Reids時由於文件尺寸較小導致頻繁的重寫。

appendfsync :everysec (推薦配置)

#持久化策略

always (同步持久化,每次發生數據變更會被立即記錄到磁碟,性能差但數據完整性比較好)

everysec (非同步操作,每秒記錄,如果一秒鍾內宕機,有數據丟失)

no (將緩存回寫的策略交給系統,linux 默認是30秒將緩沖區的數據回寫硬碟的)

一般來說可以考慮同時使用兩種持久化方案.

⑷ linux資料庫伺服器佔用內存過高,是怎麼回事

修改mysql配置文件,優化緩存大小和連接數連接方式,優化sql語句 ,記得mysql好像是有工具可以查看最佔用資源的sql語句,找到他,優化他。
安裝好mysql後,配製文件應該在/usr/local/mysql/share/mysql目錄中,配製文件有幾個,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的網站和不同配製的伺服器環境,當然需要有不同的配製文件了。

一般的情況下,my-medium.cnf這個配製文件就能滿足我們的大多需要;一般我們會把配置文件拷貝到/etc/my.cnf 只需要修改這個配置文件就可以了,使用mysqladmin variables extended-status –u root –p 可以看到目前的參數,有3個配置參數是最重要的,即key_buffer_size,query_cache_size,table_cache。

key_buffer_size只對MyISAM表起作用,

key_buffer_size指定索引緩沖區的大小,它決定索引處理的速度,尤其是索引讀的速度。一般我們設為16M,實際上稍微大一點的站點這個數字是遠遠不夠的,通過檢查狀態值Key_read_requests和Key_reads,可以知道key_buffer_size設置是否合理。比例 key_reads / key_read_requests應該盡可能的低,至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE 『key_read%』獲得)。 或者如果你裝了phpmyadmin 可以通過伺服器運行狀態看到,筆者推薦用phpmyadmin管理mysql,以下的狀態值都是本人通過phpmyadmin獲得的實例分析:

這個伺服器已經運行了20天
key_buffer_size – 128M
key_read_requests – 650759289
key_reads - 79112
比例接近1:8000 健康狀況非常好

⑸ Postgresql-9.1.5-1-linux-x64是內存資料庫嗎

應該不是的,內存資料庫相當於把數據cache到內存中,提高訪問效率,因為幾乎沒有磁碟I/O,我知道的是ORACLE有內存資料庫timesten,但是我之前用的時候是和Oracle的資料庫配合使用以提高Application與DB之間的訪問效率,內存數據應該也可以單獨使用。 反正Postgresql應該不是啦

⑹ Linux資料庫伺服器物理內存和虛擬內存滿了怎麼排查和解決

一、查看物理內存

執行如下命令即可查看物理內存,執行效果如下圖所示:

dmidecode -t memory | grep Size

二、配置空間

物理內存是沒辦法配置的,只能配置虛擬內存,在Linux系統即Swap分區。具體操作swap分區的方法如下:

⑺ 如何使用 Linux Huge Pages 配置大型資料庫的 x86 內存性能

大型資料庫系統的性能調優頗具挑戰性。根據操作系統 (OS) 和硬體的不同,有些性能問題可能難以通過常規分析方法(如 AWR 報表)和操作系統工具(如 sar、top 和iostat)來檢測。
x86 環境中的內存利用率就是一個難以識別的問題,但如果分析和配置得當,可顯著提升性能。

想對本文發表評論嗎?請將鏈接發布在 Facebook 的 OTN Garage 頁面上。有類似文章要分享?請將其發布在 Facebook 或 Twitter 上,我們來進行討論。


現在的系統內存更大,內存利用率成為一個亟待解決的重要問題。本文介紹如何最佳配置大型資料庫的 x86 系統內存性能。
適用於 x86 平台的虛擬內存架構
與最初時相比,x86 和 x86-64 晶元組的內存架構已經發生巨大變化;但默認內存頁面大小卻一直未變。遇到使用大量內存的大型應用程序(如資料庫)時,這可能導致效率低下或開銷過大。
x86 架構是一種虛擬內存架構,其允許定址范圍超過硬體中的可用物理內存。這通過允許每個進程擁有自己可定址的內存來實現。該進程認為此內存是專供自己使用的。這稱為進程的虛擬內存。實際上,此內存可以是實際駐留於 RAM 晶元上的物理內存,也可以存儲在物理磁碟上被稱作交換區 或分頁區 的專用區域中。
進程不知道虛擬內存是存儲在 RAM 中還是磁碟上;內存由操作系統管理。如果所需內存超過可用物理內存,操作系統會將一些內存移出到分頁區。這種活動效率極低,是導致性能問題的常見原因。由於磁碟的存取速度遠低於 RAM,「分頁」的進程會遇到顯著的性能問題。

Oracle 資料庫和 Linux 內存管理
系統中使用的內存越多,管理該內存所需的資源也就越多。對於 Linux 操作系統,通過 Linux kswapd 進程和頁表內存結構(針對系統中存在的每個進程包含一條記錄)實現內存管理。每條記錄包含進程使用的每頁虛擬內存及其物理地址(RAM 或磁碟)。通過使用處理器的轉換旁路緩沖區(TLB,一小塊緩存)為該進程提供幫助。
當大量內存用於 Oracle 資料庫時,操作系統將消耗大量資源來管理虛擬地址到物理地址轉換,其結果往往是一個非常大的頁表結構。由於每條頁表條目包含進程正在使用的所有內存頁面的虛擬地址到物理地址的轉換,因此對於非常大的系統全局區 (SGA),每個進程的頁表條目都可能很大。例如,使用 8 GB 內存的 Oracle 資料庫進程的頁表條目將達 8 GB/4 KB(即 2097152 條記錄或頁面)。如果有 100 個 Oracle 資料庫會話/進程,則將頁面數乘以 100。您可以看到,要管理的頁面數量巨大。
同樣,操作系統使用頁表條目管理系統中進程所用的內存。在 Linux 中,執行此管理的操作系統進程被稱作 kswapd,可在操作系統工具中找到。
TLB 緩存將緩存頁表條目來提高性能。典型的 TLB 緩存可保存 4 到 4096 個條目。對於數百萬甚至數十億個頁表條目,這種緩存就不夠用了。
如上所述,對於使用大型 SGA 的系統,頁表結構可能會變得非常大。清單 1 中的 Linux 系統輸出示例顯示頁表條目佔用了 766 MB 的 RAM。這可能導致顯著的系統開銷。我親眼見過數 GB 的頁表條目。
HugePages 是 Linux 操作系統的一個內核特性,讓操作系統可以支持現代硬體架構的大頁面容量功能。對於 Oracle 資料庫,通過啟用 HugePages 並使用大頁面,可以用一個頁表條目代表一個大頁面,而不是使用許多條目代表較小的頁面,從而可以管理更多內存,減少操作系統對頁面狀態的維護並提高 TLB 緩存命中率。在 Linux 中,大頁面大小為 2 MB。
在 Oracle Linux 6 或 Red Hat Enterprise Linux 6 (RHEL 6) 中,可在 /proc/meminfo 中找到分配的 HugePages 數,如清單 1 所示:
[root@ptc1 ~]# cat /proc/meminfo
MemTotal: 4045076 kB
MemFree: 14132 kB
Buffers: 656 kB
Cached: 1271560 kB
SwapCached: 6184 kB
Active: 2536748 kB
Inactive: 625616 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 4045076 kB
LowFree: 14132 kB
SwapTotal: 1052216 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
Mapped: 2036576 kB
Slab: 49712 kB
CommitLimit: 3074752 kB
Committed_AS: 8054664 kB
PageTables: 766680 kB
VmallocTotal:536870911 kB
VmallocUsed: 263168 kB
VmallocChunk:536607347 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB

清單 1
在 Oracle Linux 6 中,分配的 HugePages 略有不同,如清單 2 所示:
AnonHugePages: 0 kB
HugePages_Total: 1508
HugePages_Free: 60
HugePages_Rsvd: 57
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 10240 kB
DirectMap2M: 16766976 kB

清單 2
Oracle Linux 6 HugePages 值如下所示:
AnonHugePages。匿名 HugePages 數量。Oracle Linux 6.5 中已刪除此計數器。與透明 HugePages 有關。(有關透明 HugePages 的詳細信息,請參見「透明 HugePages 和 Oracle 資料庫」一節。)
HugePages_Total。HugePages 數量。空間大小為 HugePages 數乘以 2M。
HugePages_Free。池中尚未分配的 HugePages 數量。
HugePages_Rsvd。「reserved」的縮寫形式,表示池中已經承諾分配但尚未分配的 HugePages 數量。保留的 HugePages 保證應用程序隨時請求都能夠從 HugePages 池分配 HugePages,即使系統已經運行一段時間。
HugePages_Surp。「surplus」的縮寫形式,表示池中大於 /proc/sys/vm/nr_hugepages 中值的 HugePages 數量。剩餘 HugePages 的最大數量由 /proc/sys/vm/nr_overcommit_hugepages 控制。此值為 0 的情況很常見。
Hugepagesize。HugePage 的大小。此參數當前為 2048 或 2 MB。
解決方案
通過在 Linux 中啟用 HugePages,可以通過增大頁面大小來減少 TLB 條目數。對於 Linux,HugePages 大小為 2 MB。通過為 Oracle 資料庫 SGA 選用更大的頁面,可大大減少要管理的頁面數。
在清單 1 所示示例中,單條記錄的虛擬地址到物理地址轉換數將從 2097152 減少至 4096。這將減小頁表結構的大小,提高 TLB 命中率,並降低 kswapd 使用率。
註:啟用 HugePages 可顯著提升性能。
在 Linux 中啟用 HugePages
在 Linux 中,通過將 Linux 初始化參數 vm.nr_hugepages 設置為您希望為 Oracle 資料庫 SGA 提供的 2 MB 頁面數來配置 HugePages 功能。設置此參數可通過將其值調大來減少頁面數。
註:Oracle Database 11g 中引入的 Oracle 資料庫自動內存管理特性與 Linux HugePages 不兼容。HugePages 提供的性能改進優於自動內存管理所提供的易用性。
有關如何實現 HugePages 配置的詳細信息,可在表 1 所示的 My Oracle Support 文檔中找到。
表 1. My Oracle Support 文檔

My Oracle Support 文檔 ID
文檔名稱

1557478.11557478.1 「通知:SLES11、RHEL6、OEL6 和 UEK2 內核上禁用透明 HugePages」
361323.1 「Linux 上的 HugePages:它是什麼……它不是什麼」
361468.1 「Oracle Linux 64 位上的 HugePages」
749851.1 「Linux 上的 HugePages 和 Oracle Database 11g 自動內存管理 (AMM)」
1134002.1 「ASMM 和 LINUX x86-64 HugePages 支持」
401749.1 「用於計算推薦的 Linux HugePages/HugeTLB 配置的值的 Shell 腳本

除了配置 vm.nr_hugepages,還可以將可選的 vm.hugetlb_shm_group 參數設置為有權使用 HugePages 的操作系統組。默認情況下,此參數設置為 0,從而允許所有組使用 HugePages。可以將此參數設置為 Oracle 資料庫進程所屬的操作系統組,如 oinstall。
驗證是否已對 Oracle 資料庫實例啟用大頁面
可以通過檢查警報日誌來驗證是否對資料庫實例啟用了大頁面。啟動實例時,您應在警報日誌中參數列表前面看到如下內容:
****************** Large Pages Information *****************
Total Shared Global Region in Large Pages = 28 GB (100%)
Large Pages used by this instance: 14497 (28 GB)
Large Pages unused system wide = 1015 (2030 MB) (alloc incr 64 MB)
Large Pages configured system wide = 19680 (38 GB)
Large Page size = 2048 KB

透明 HugePages 和 Oracle 資料庫
最近,RHEL 6、Oracle Linux 6 和 SUSE Linux Enterprise Server 11 中引入了一個新特性 — 透明 HugePages。透明 HugePages 旨在自動、動態地利用 HugePages。遺憾的是,目前透明 HugePages 與傳統 HugePages 聯用會出現一些問題,導致性能問題和系統重啟。在 My Oracle Support 說明 1557478.11557478.1 中,Oracle 建議不要同時使用透明 HugePages 和 Oracle 資料庫。
註:在 Oracle Linux 6.5 版中,已刪除透明 HugePages。
總結
通過使用更大的頁面,可以減少頁表條目數,從而最大程度減少開銷。使用 HugePages 可顯著提升性能,增加系統中的內存數量和 SGA 大小。