① 如何設置SQLServer資料庫內存
1、打開SQL Sever 2008 R2資料庫
② sql資料庫伺服器,內存佔用過大怎麼辦
SqlServer系統內存管理在沒有配置內存最大值,很多時候我們會發現運行SqlServer的系統內存往往居高不下。這是由於他對於內存使用的策略是有多少閑置的內存就佔用多少,直到內存使用慮達到系統峰值時(預留內存根據系統默認預留使用為准,至少4M),才會清除一些緩存釋放少量的內存為新的緩存騰出空間。
這些內存一般都是SqlServer運行時候用作緩存的,例如你運行一個select語句,執行個存儲過程,調用函數;
1.數據緩存:執行個查詢語句,SqlServer會將相關的數據頁(SqlServer操作的數據都是以頁為單位的)載入到內存中來,下一次如果再次請求此頁的數據的時候,就無需讀取磁碟了,大大提高了速度。
2.執行命令緩存:在執行存儲過程,自定函數時,SqlServer需要先二進制編譯再運行,編譯後的結果也會緩存起來,再次調用時就無需再次編譯。
在我們執行完相應的查詢語句,或存儲過程,如果我們不在需要這些緩存,我可以將它清除,DBCC管理命令緩存清除如下:
--清除存儲過程緩存
DBCCFREEPROCCACHE
--註:方便記住關鍵字FREEPROCCACHE可以拆解成FREE(割捨,清除)PROC(存儲過程關鍵字簡寫),CACHE(緩存)
--清除會話緩存
DBCCFREESESSIONCACHE
--註:FREE(割捨,清除)SESSION(會話)CACHE(緩存)
--清除系統緩存
DBCCFREESYSTEMCACHE('All')
--註:FREESYSTEMCACHE
--清除所有緩存
DBCCDROPCLEANBUFFERS
--註:DROPCLEANBUFFERS
③ mysql 如何分配內存
我們仍然使用兩個會話,一個會話 run,用於運行主 SQL;另一個會話 ps,用於進行 performance_schema 的觀察:
主會話線程號為 29,
可以看到寫入的線程是 page_clean_thread,是一個刷臟操作,這樣就能理解數據為什麼是慢慢寫入的。
也可以看到每個 IO 操作的大小是 16K,也就是刷數據頁的操作。
結論:
我們可以看到,
1. MySQL 會基本遵守 max_heap_table_size 的設定,在內存不夠用時,直接將表轉到磁碟上存儲。
2. 由於引擎不同(內存中表引擎為 heap,磁碟中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實驗寫磁碟的數據量和實驗 05中使用內存的數據量不同。
3. 如果臨時表要使用磁碟,表引擎配置為 InnoDB,那麼即使臨時表在一個時間很短的 SQL 中使用,且使用後即釋放,釋放後也會刷臟頁到磁碟中,消耗部分 IO。
④ 如何查看mysql資料庫連接數和內存佔用
命令: show processlist;
如果是root帳號,你能看到所有用戶的當前連接。如果是其它普通帳號,只能看到自己佔用的連接。
show processlist;只列出前100條,如果想全列出請使用show full processlist;
mysql> show
processlist;
命令: show status;
命令:show status like '%下面變數%';
Aborted_clients 由於客戶沒有正確關閉連接已經死掉,已經放棄的連接數量。
Aborted_connects
嘗試已經失敗的MySQL伺服器的連接的次數。
Connections 試圖連接MySQL伺服器的次數。
Created_tmp_tables
當執行語句時,已經被創造了的隱含臨時表的數量。
Delayed_insert_threads 正在使用的延遲插入處理器線程的數量。
Delayed_writes 用INSERT DELAYED寫入的行數。
Delayed_errors 用INSERT
DELAYED寫入的發生某些錯誤(可能重復鍵值)的行數。
Flush_commands 執行FLUSH命令的次數。
Handler_delete
請求從一張表中刪除行的次數。
Handler_read_first 請求讀入表中第一行的次數。
Handler_read_key
請求數字基於鍵讀行。
Handler_read_next 請求讀入基於一個鍵的一行的次數。
Handler_read_rnd
請求讀入基於一個固定位置的一行的次數。
Handler_update 請求更新表中一行的次數。
Handler_write
請求向表中插入一行的次數。
Key_blocks_used 用於關鍵字緩存的塊的數量。
Key_read_requests
請求從緩存讀入一個鍵值的次數。
Key_reads 從磁碟物理讀入一個鍵值的次數。
Key_write_requests
請求將一個關鍵字塊寫入緩存次數。
Key_writes 將一個鍵值塊物理寫入磁碟的次數。
Max_used_connections
同時使用的連接的最大數目。
Not_flushed_key_blocks 在鍵緩存中已經改變但是還沒被清空到磁碟上的鍵塊。
Not_flushed_delayed_rows 在INSERT DELAY隊列中等待寫入的行的數量。
Open_tables 打開表的數量。
Open_files 打開文件的數量。
Open_streams 打開流的數量(主要用於日誌記載)
Opened_tables
已經打開的表的數量。
Questions 發往伺服器的查詢的數量。
Slow_queries
要花超過long_query_time時間的查詢數量。
Threads_connected 當前打開的連接的數量。
Threads_running 不在睡眠的線程數量。
Uptime 伺服器工作了多少秒
⑤ ADB使用什麼命令能把手機資料庫里的文件復制到電腦上和外置內存卡上
ADB是一個 客戶端-伺服器端 程序, 其中客戶端是你用來操作的電腦, 伺服器端是android設備.
先說安裝方法, 電腦上需要安裝客戶端. 客戶端包含在sdk里. 設備上不需要安裝, 只需要在手機上打開選項settings-applications-development-USBdebugging.
對於Mac和Linux用戶, 下載好的sdk解壓後, 可以放~或者任意目錄. 然後修改~/.bash_profile文件, 設置運行環境指向sdk的tools目錄.
具體是打開~/.bash_profile文件(如果沒有此文件也可以自行添加), 在裡面加入一行:
export PATH=${PATH}:<你的sdk目錄>/tools
然後就可以使用adb命令了.
嫌安裝麻煩的同學其實也可以省去上面安裝步驟, 直接輸入完整路徑來使用命令
對於windows xp用戶, 需要先安裝usb驅動
android_usb_windows.zip (1.33 MB) , 然後如果你只打算使用adb而不想下載整個sdk的話, 可以下載這個單獨的adb工具包
adb_win.zip (571.56 KB) 下載後解壓, 把裡面 adb.exe 和 AdbWinApi.dll 兩個文件放到系統盤的 windows/system32 文件夾里就可以了
1.確定手機root了,取得了root許可權才能刪除系統文件呀.
2.下載Android_db.rar,解壓到%windir/%System32下.
3.手機連接數據線,在電腦上打開cmd,然後輸入命令
adb remount
adb shell
su
執行完成之後,你會看到:
* daemon not running. starting it now *
* daemon started successfully *
4.接著就是Linux命令行模式了,輸入
cd system/app
你會發現沒啥變化,然後輸入ls回車.
這時候列表顯示了system/app裡面的所有文件,也就是Rom集成的一些軟體了.
5.開始刪除吧.比如刪除Youtube,他的文件名是Youtube.odex和Youtube.apk
我們要刪除這2個文件,敲入以下命令:
rm Youtube.*
重啟,Youtube已經刪除掉了,注意各位同學千萬不要刪除你不知道是啥的東西.
指定允許AVD的內存大小:
emulator -avd avdName -partition-size 256
啟動一個叫avdName的模擬器,允許內存最大為256MADB常用的幾個命令
1. 查看設備
adb devices
這個命令是查看當前連接的設備, 連接到計算機的android設備或者模擬器將會列出顯示
2. 安裝軟體
adb install
這個命令將指定的apk文件安裝到設備上
3. 卸載軟體
adb uninstall <軟體名>
adb uninstall -k <軟體名>
如果加 -k 參數,為卸載軟體但是保留配置和緩存文件.
4. 登錄設備shell
adb shell
adb shell
這個命令將登錄設備的shell.
後面加將是直接運行設備命令, 相當於執行遠程命令
5. 從電腦上發送文件到設備
adb push <本地路徑> <遠程路徑>
用push命令可以把本機電腦上的文件或者文件夾復制到設備(手機)
6. 從設備上下載文件到電腦
adb pull <遠程路徑> <本地路徑>
用pull命令可以把設備(手機)上的文件或者文件夾復制到本機電腦
7. 顯示幫助信息
adb help
這個命令將顯示幫助信息
刪除Android系統Rom自帶的軟體
Android系統沒有卸載Rom自帶軟體的功能.可能有些同學很想刪除廢了武功的Youtube,想刪除牆那邊的Twitter.
加上Android的快捷方式沒法修改沒法自己排序沒法分頁.
安裝的程序太多就會發現原來找到自己想要的東西很難.
綜上所述,我覺得告知各位菜鳥同學如何刪除自帶的程序是很有必要的一件事情.1.確定手機root了,取得了root許可權才能刪除系統文件呀.
2.下載Android_db.rar,解壓到%windir/%System32下.
3.手機連接數據線,在電腦上打開cmd,然後輸入命令
adb remount
adb shell
su
執行完成之後,你會看到:
* daemon not running. starting it now *
* daemon started successfully *
4.接著就是Linux命令行模式了,輸入
cd system/app
你會發現沒啥變化,然後輸入ls回車.
這時候列表顯示了system/app裡面的所有文件,也就是Rom集成的一些軟體了.
5.開始刪除吧.比如刪除Youtube,他的文件名是Youtube.odex和Youtube.apk
我們要刪除這2個文件,敲入以下命令:
rm Youtube.*
重啟,Youtube已經刪除掉了,注意各位同學千萬不要刪除你不知道是啥的東西.
指定允許AVD的內存大小:
emulator -avd avdName -partition-size 256
啟動一個叫avdName的模擬器,允許內存最大為256M
⑥ 資料庫內存不足,如何設置內存管理
1、
主要設置min
server
memory
和
max
server
memory
,如果同台伺服器有多台吃內存大戶服務,
max
server
memory
給設置一個值稍大的值出來,別讓SQL
server把WINDOWS內存都吃完了也別讓其他的服務把WINDOWS內存吃完了,這樣才會相安無事2.設置方法可以通過命令方式的,樓上的挺好,還有就是通過SQL
SERVER企業管理器進行:滑鼠右鍵伺服器\屬性\內存
可以看多最大內存和最小內存設置選項。
⑦ oracle12c內存資料庫怎麼使用
內存資料庫從范型上可以分為關系型內存資料庫和鍵值型內存資料庫。 在實際應用中內存資料庫主要是配合oracle或mysql等大型關系資料庫使用,關注性能。 作用類似於緩存,並不注重數據完整性和數據一致性。 基於鍵值型的內存資料庫比關系型更加易...
⑧ 如何使用 REORG 和 RUNSTATS 命令優化資料庫性能
1、調整數據結構的設計。這一部分在開發信息系統之前完成,程序員需要考慮是否使用ORACLE資料庫的分區功能,對於經常訪問的資料庫表是否需要建立索引等。
2、2、調整應用程序結構設計。這一部分也是在開發信息系統之前完成,程序員在這一步需要考慮應用程序使用什麼樣的體系結構,是使用傳統的Client/Server兩層體系結構,還是使用Browser/Web/Database的三層體系結構。不同的應用程序體系結構要求的資料庫資源是不同的。
3、3、調整資料庫SQL語句。應用程序的執行最終將歸結為資料庫中的SQL語句執行,因此SQL語句的執行效率最終決定了ORACLE資料庫的性能。ORACLE公司推薦使用ORACLE語句優化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調整優化SQL語句。
4、4、調整伺服器內存分配。內存分配是在信息系統運行過程中優化配置的,資料庫管理員可以根據資料庫運行狀況調整資料庫系統全局區(SGA區)的數據緩沖區、日誌緩沖區和共享池的大小;還可以調整程序全局區(PGA區)的大小。需要注意的是,SGA區不是越大越好,SGA區過大會佔用操作系統使用的內存而引起虛擬內存的頁面交換,這樣反而會降低系統。
5、5、調整硬碟I/O,這一步是在信息系統開發之前完成的。資料庫管理員可以將組成同一個表空間的數據文件放在不同的硬碟上,做到硬碟之間I/O負載均衡。
6、6、調整操作系統參數,例如:運行在UNIX操作系統上的ORACLE資料庫,可以調整UNIX數據緩沖池的大小,每個進程所能使用的內存大小等參數。
實際上,上述資料庫優化措施之間是相互聯系的。ORACLE資料庫性能惡化表現基本上都是用戶響應時間比較長,需要用戶長時間的等待。但性能惡化的原因卻是多種多樣的,有時是多個因素共同造成了性能惡化的結果,這就需要資料庫管理員有比較全面的計算機知識,能夠敏感地察覺到影響資料庫性能的主要原因所在。另外,良好的資料庫管理工具對於優化資料庫性能也是很重要的。
ORACLE資料庫性能優化工具
常用的資料庫性能優化工具有:
1、1、ORACLE資料庫在線數據字典,ORACLE在線數據字典能夠反映出ORACLE動態運行情況,對於調整資料庫性能是很有幫助的。
2、2、操作系統工具,例如UNIX操作系統的vmstat,iostat等命令可以查看到系統系統級內存和硬碟I/O的使用情況,這些工具對於管理員弄清出系統瓶頸出現在什麼地方有時候很有用。
3、3、SQL語言跟蹤工具(SQL TRACE FACILITY),SQL語言跟蹤工具可以記錄SQL語句的執行情況,管理員可以使用虛擬表來調整實例,使用SQL語句跟蹤文件調整應用程序性能。SQL語言跟蹤工具將結果輸出成一個操作系統的文件,管理員可以使用TKPROF工具查看這些文件。
4、4、ORACLE Enterprise Manager(OEM),這是一個圖形的用戶管理界面,用戶可以使用它方便地進行資料庫管理而不必記住復雜的ORACLE資料庫管理的命令。
5、5、EXPLAIN PLAN——SQL語言優化命令,使用這個命令可以幫助程序員寫出高效的SQL語言。
ORACLE資料庫的系統性能評估
信息系統的類型不同,需要關注的資料庫參數也是不同的。資料庫管理員需要根據自己的信息系統的類型著重考慮不同的資料庫參數。
⑨ 什麼情況下用內存資料庫
相對於磁碟,內存的數據讀寫速度要高出幾個數量級,將數據保存在內存中相比從磁碟上訪問能夠極大地提高應用的性能。同時,內存資料庫拋棄了磁碟數據管理的傳統方式,基於全部數據都在內存中重新設計了體系結構,並且在數據緩存、快速演算法、並行操作方面也進行了相應的改進,所以數據處理速度比傳統資料庫的數據處理速度要快很多,一般都在10倍以上。內存資料庫的最大特點是其"主拷貝"或"工作版本" 常駐內存,即活動事務只與實時內存資料庫的內存拷貝打交道。顯然,它要求較大的內存量,但並非任何時刻整個資料庫都存放在內存,即內存資料庫系統還是要處理I/O。
內存資料庫是以犧牲內存資源為代價換取數據處理實時性的,內存資料庫和磁碟資料庫都是當今信息社會里每個企業所必須的關系型資料庫產品,磁碟資料庫解決的是大容量存儲和數據分析問題,而內存資料庫解決的是實時處理和高並發問題。兩者的存在是相輔相成的,內存資料庫的事務實時處理性能要遠強於磁碟資料庫。但是相對的,他的數據安全方面還沒有達到磁碟資料庫比肩的地步。
內存資料庫將物理內存作為數據的第一存儲介質,而將磁碟作為備份。隨著電信業務的發展,系統對實時性的要求和對業務靈活修改的要求非常高,在此種情況下對於內存資料庫的需求也越來越高。磁碟資料庫的做法是將數據存入內存中進行處理,這種方式的可管理性及數據安全可靠性都沒有保障。而內存資料庫正是針對這一弱點進行了改進。
實際上,內存資料庫並不是一項時髦技術,其出現於上世紀60年代末,但由於市場的需求原因在90年代後期才開始發展。作為新一代資料庫,Altibase產品已經走向混合型資料庫,其版本Altibase 4.0已經有一套自帶的磁碟資料庫,用戶一旦購買了Altibase的內存資料庫,就無須再購買磁碟資料庫。它把熱數據(經常被使用的、訪問比較高的、經常要運算的數據)放在內存資料庫里,而把歷史性數據放在磁碟資料庫里,可為用戶進一步減少投資。
對於內存資料庫而言,可以將同樣資料庫的部分內容存放於磁碟上,而另一部分存放於內存中。用戶可以選擇將數據存儲在內存表中以提供即時的數據訪問。若訪問時間不緊急或數據存於內存中所佔空間過大時,用戶可將這些數據存入磁碟表中。
比如,在手機用戶開始拔打電話時,如果應用基於內存資料庫技術的混合數據管理引擎,就通過內存表檢索其服務選項並立即驗證用戶身份,而將通話清單和計費清單歸檔到磁碟表中。從而,達到了速度與資源使用的平衡。
內存資料庫的技術,一個很重要的特點,是可以對內存中的數據實現全事務處理,這是僅僅把數據以數組等形式放在內存中完全不同的。並且,內存資料庫是與應用無關的,顯然這種體系結構具有其合理性。內存引擎可以實現查詢與存檔功能使用的是完全相同的資料庫,同時內存表與磁碟表也使用的是完全相同的存取方法。存儲的選擇,對於應用開發者而言是完全透明的。
對於內存資料庫而言,實現了數據在內存中的管理,而不僅僅是作為資料庫的緩存。不像其它將磁碟數據塊緩存到主存中的資料庫,內存資料庫的內存引擎使用了為隨機訪問內存而特別設計的數據結構和演算法,這種設計使其避免了因使用排序命令而經常破壞緩存資料庫性能的問題。通過內存資料庫,減少了磁碟I/O,能夠達到了以磁碟I/O 為主的傳統資料庫無法與其相比擬的處理速度。
因此,內存資料庫技術的應用,可以大大提高資料庫的速度,這對於需要高速反應的資料庫應用,如電信、金融等提供了有力支撐。
由於把大多數數據都放在內存中進行操作,使得內存資料庫有著比磁碟資料庫高得多的性能表現,這一特點非常契合電信企業運營支撐系統對實時性的要求。
電信業的競爭正在全方位地展開,這種競爭必然帶來新的價值鏈模式以及新的計費方式,這些變化對目前的電信運營支撐系統是一個挑戰。比如,多種業務的計費環節將不再是單一的按照時長或通信距離收取費用,而可能是根據時長、內容、使用量等多種參數的組合計費。為了應對這些挑戰,電信企業先後引入了內存資料庫,以提高後台數據管理的實時性、精確性和靈活性。
盡管內存資料庫已不是傳統磁碟資料庫的概念,但是內存資料庫本質上還是資料庫,它也具有一般資料庫的基本功能:
■ 永久數據的管理,包括資料庫的定義、存儲、維護等;
■ 完成各種數據操作,如查詢處理、存取、完整性檢查;
■ 事務管理,包括調度與並發控制等;
■ 對存取的控制和安全性檢驗;
■ 具有資料庫的可靠性恢復機制。
相對於利用程序開發手段調用內存處理來說,內存資料庫自有其優勢。首先,內存資料庫是產品化的資料庫管理軟體,極大縮短了開發周期; 其次,內存資料庫有著開放的平台和介面,程序開發和移植更加靈活便捷,也便於維護和二次開發; 第三,可以通過使用統一的SQL語言方便地查詢內存中的數據; 最後,能在資料庫中保障數據的安全性和完整性。這些優勢,對於快速部署和簡化維護都是有利的。
但內存資料庫也有其不可避免的缺點,比如: 不容易恢復,內存資料庫中的數據不總是永久的,為了保證實時,也不一定是一致和絕對正確的,有的是短暫的,有的是暫時不一致或非絕對正確的。
電信企業一直是內存資料庫的主要用戶,近幾年來,隨著計算機硬體技術的飛速發展、內存容量的提高、價格下跌以及計算機進入64位時代操作系統後可以支持更大的地址,為內存資料庫的實現提供了可能。目前內存資料庫在電信行業的應用也日趨成熟,已有超過90G的電信系統案例,能自動擴展內存空間,不需要重啟資料庫,提供ESOL自定義存儲過程,支持多線程,開發效率高,程序移植容易等等。
下面以兩個例子來介紹內存資料庫的應用。
?電信計費數據的載入
電信的二次批價和實時累賬是計費系統中的兩個必備功能。
所謂二次批價是相對於一次批價來說的。
一次批價是按照國家標准資費來進行價格計算,比如: 全球通每分鍾本地通話為0.4元,在一次批價完成後,會根據這個用戶的套餐進行再一次的計算。以北京全球通用戶接聽4分鍾的電話為例,一次批價完成後,這條話單的價格是1.6元,如果這個用戶參加了10元包月接聽套餐,那麼在二次批價後,這次通話的費用就為0元。
一次批價是用於各大運營商之間結算的,而二次批價是針對用戶個人的。
實時累賬是將用戶從每月1號到目前為止的所有費用累加起來,也就是用戶目前可以通過10086查到截止到前一天的實時話費。累賬值可以幫助用戶控制高額話費或是供用戶即時查詢消費信息。
二次批價和實時累賬過程涉及用戶資料、用戶套餐等與用戶相關的信息,電信支撐系統在開始批價時必須載入這些數據。稍大一點的省級運營商的這些數據就會超過1000萬條,計費處理模型也由於套餐的組合、產品的組合以及不同的優惠規則變得相當復雜,載入這部分數據對系統而言是一筆不小的開銷,這就使得現在的計費處理速度比較慢,而且很難做到對數據的實時更新。內存資料庫的引入在一定程度上解決了這個問題。
在計費二次批價過程中數據量最大的是詳單數據,這部分數據不用放在內存資料庫中,每處理完一個話單文件或達到設定的提交記錄數時直接操作磁碟資料庫,不會影響系統性能。最急切的是將用戶資料、套餐、營業套餐和計費套餐對應關系數據、計費套餐模型數據及用戶累計數據放到內存資料庫中,這部分數據查詢操作遠比數據新增和更新操作要頻繁。除了這些數據外,當然還有應用需要的其他數據也都可以載入到內存資料庫。
在採用內存資料庫後,用戶通過營業部或客戶查詢實時話費的時候完全可以做到實時,比目前只能提供查詢到前一天的實時話費在業務上有了質的飛躍。因為系統在處理這部分數據時查詢流程和以前的完全一樣,但系統省去了以往內存中的數據和磁碟資料庫數據同步的環節,所以就能做到了實時查詢。對於信控來說也同樣,以往系統在累完賬後要按照一定周期刷新信控數據,這就存在一個時間差,不能夠完全做到實時。
而採用內存資料庫後,信控可以直接取得內存資料庫中的實時話費累計表中的數據,完全實現實時預警、停機。二次批價和累賬中採用內存資料庫後,對防欺詐、收入保障系統也有相當大的好處,這樣能夠充分保證運營商的切身利益。
另外,在採用內存資料庫後,整體提高了系統批價、累賬的處理速度,大大緩解訪問磁碟資料庫的壓力,提高數據查詢、修改、刪除的效率,也為後付費和預付費的融合提供了可能。
電信計費數據的同步
電信營業數據和計費系統中的數據總是在不斷的變化中,這就涉及內存資料庫中的數據和磁碟資料庫數據的同步問題(為了描述清楚,這里的磁碟資料庫以Oracle DB為例來說明)。數據同步包括兩部分: 從內存資料庫到Oracle DB數據同步和從Oracle DB到內存資料庫的同步。
1. Oracle DB到內存資料庫同步
這部分數據同步採用增量表的方式,營業系統或CRM新增或更新的數據將生成到Oracle的增量表中,計費後台程序先到這些增量表中查詢數據。如果能在這些增量表中查到數據就把這些數據更新到內存資料庫對應表中,如果查不到,就直接從內存資料庫中直接查詢,從而保證了數據的完整性和實時性。由於增量表的數據量一般會很小,所以這部分操作不會影響系統的性能。
2. 內存資料庫到Oracle DB同步
由於Oracle的計費後台批價、累賬數據幾乎都載入到了內存資料庫中,所以Oracle資料庫對應的數據表將主要用於對內存資料庫的數據備份。
用戶最新的實時話費等信息都保存在內存資料庫中,實時話費查詢將直接連接到內存資料庫中查詢,保證用戶得到最新的費用信息。信控也直接從內存資料庫查詢數據,因此對Oracle中的這部分數據已經沒有實時性的要求。這時內存資料庫到Oracle的同步可以由應用程序生成文件,定時地往Oracle資料庫中同步備份,或者採用Oracle 存儲過程在系統相對空閑時間段進行數據導入就可以了。
總體而言,由於市場與技術的快速發展,電信業務在不斷擴充,其運營和管理不斷優化,傳統的一些支撐系統的架構已經逐漸不能滿足日益增長的業務要求和客戶需求,引入一些新的技術來解決我們生產中遇到的問題是必然的。比如採用內存資料庫來代替以前的共享內存技術,使得原來在內存中不標準的東西,包括介面、格式和管理都標准化了。
內存資料庫只是多種新技術中有代表性的一種而已,只要解放思想、選用得當,完全可以在投入不大的情況下克服系統中的瓶頸,以最小的代價獲得最大回報。
通用資料庫大家見的多了,Oracle、Db2、Sqlserver、Sybase、Informix 還有最近比較火的Mysql、和Pqllite,當然還不能忘記開源的PostgreSQL。通常情況下這些資料庫可以承擔重要業務,但是在要求高性能方面還是略有不足。在計費系統中如果用戶信息常常改變的話延遲方面就會產生比較大的影響,甚至能影響到計費系統的正常運行。
我接觸到唯一的內存資料庫就是亞信在中移動計費中心稽核系統中使用的。由於稽核系統需要實施同步用戶狀態信息和訂購信息,然後對產生的話單進行稽核,如果響應速度較慢的話就會產生錯誤的結果。最初沒有稽核系統的時候,計費的標准基本是sp發過來的,然而用戶方面卻經常發現自己沒有實際使用或者已經取消這項業務的時候,自己的帳單中仍然收取了費用,因此中移動決心要對sp的話單進行稽核,以自己的數據為標准,徹底剪斷sp亂收費的手段。
如果要取到用戶狀態信息和訂購信息的話就要從多個系統中同步過來,同時對話單進行稽核,中間的處理時間要求比較嚴格(用戶可能會在短時間內檢查自己的話費信息),對系統響應時間就要盡量短。
通用資料庫在這方面處於劣勢。亞信就以三台rx8420作為資料庫主機,將31個省用戶的信息按照數量的多少分擔到三台主機,每個省至少有一個入庫進程,對於用戶比較多的就採用多個進程進行入庫。數據的採集來源主要是通過BOSS和計費的一級系統。
由於數據是存儲在內存中,所以存儲的數據結構和通用資料庫有所差異,同時為了保證數據的安全,在磁碟上有一個內存數據的鏡像,每隔一定時間將內存中的數據同步到磁碟上,當主機故障時可以通過磁碟恢復數據。當主機故障時,會有備用主機通過HA接管。但是對於數據操作的日誌和回滾就沒有Oracle做的好了,只提供了簡單的恢復機制。
在計費系統中首先要對sp發來的話單進行稽核,主要標準是用戶狀態和訂購信息。例如用戶最近7天一直處於關機狀態,如果sp的話單中出現新的訂購信息就將此條話單作為錯單處理。移動通過這種方式在和sp的博弈中取得主動。稽核系統上線後用戶對於sp的投訴問題明顯減少。
鏈接一:內存資料庫與傳統資料庫的異同
傳統的資料庫系統是關系型資料庫,開發這種資料庫的目的,是處理永久、穩定的數據。關系資料庫強調維護數據的完整性、一致性,但很難顧及有關數據及其處理的定時限制,不能滿足工業生產管理實時應用的需要,因為實時事務要求系統能較准確地預報事務的運行時間。
對磁碟資料庫而言,由於磁碟存取、內外存的數據傳遞、緩沖區管理、排隊等待及鎖的延遲等使得事務實際平均執行時間與估算的最壞情況執行時間相差很大,如果將整個資料庫或其主要的"工作"部分放入內存,使每個事務在執行過程中沒有I/O,則為系統較准確估算和安排事務的運行時間,使之具有較好的動態可預報性提供了有力的支持,同時也為實現事務的定時限制打下了基礎。這就是內存資料庫出現的主要原因。
內存資料庫所處理的數據通常是"短暫"的,即有一定的有效時間,過時則有新的數據產生,而當前的決策推導變成無效。所以,實際應用中採用內存資料庫來處理實時性強的業務邏輯處理數據。而傳統資料庫旨在處理永久、穩定的數據,其性能目標是高的系統吞吐量和低的代價,處理數據的實時性就要考慮的相對少一些。實際應用中利用傳統資料庫這一特性存放相對實時性要求不高的數據。
在實際應用中這兩種資料庫常常結合使用,而不是以內存資料庫替代傳統資料庫。
鏈接二:幾款內存資料庫產品
■ Oracle TimesTen
Oracle TimesTen是Oracle從TimesTen公司收購的一個內存優化的關系資料庫,它為應用程序提供了實時企業和行業(例如電信、資本市場和國防)所需的即時響應性和非常高的吞吐量。Oracle TimesTen可作為高速緩存或嵌入式資料庫被部署在應用程序層中,它利用標準的 SQL 介面對完全位於物理內存中的數據存儲區進行操作。
■ Altibase
Altibase是一個在事務優先的環境中提供高性能和高可用性的軟體解決方案。它提供高性能、容錯能力和事務管理能力,特別適合通信、網上銀行、證券交易、實時應用和嵌入式系統領域。Altibase能夠最大限度地發揮資料庫服務系統的潛力,增強數據伺服器的處理能力。Altibase支持客戶端/伺服器架構或嵌入式架構。其中客戶端/伺服器架構非常適合一般的應用。而嵌入式架構將應用程序嵌入到資料庫伺服器,適合於有高時效要求的實時系統。
■ eXtremeDB
eXtremeDB實時資料庫是McObject公司的一款特別為實時與嵌入式系統數據管理而設計的資料庫,只有 50K到130K的開銷,速度達到微秒級。eXtremeDB完全駐留在主內存中,不使用文件系統(包括內存檔)。eXtremeDB採用了新的磁碟融合技術,將內存拓展到磁碟,將磁碟當做虛擬內存來用,實時性能保持微秒級的同時,數據管理量在32BIT下能達到20G。
⑩ mysql資料庫伺服器一般多少內存
我們仍然使用兩個會話,一個會話 run,用於運行主 SQL;另一個會話 ps,用於進行 performance_schema 的觀察:
主會話線程號為 29,
可以看到寫入的線程是 page_clean_thread,是一個刷臟操作,這樣就能理解數據為什麼是慢慢寫入的。
也可以看到每個 IO 操作的大小是 16K,也就是刷數據頁的操作。
結論:
我們可以看到,
1. MySQL 會基本遵守 max_heap_table_size 的設定,在內存不夠用時,直接將表轉到磁碟上存儲。
2. 由於引擎不同(內存中表引擎為 heap,磁碟中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實驗寫磁碟的數據量和實驗 05中使用內存的數據量不同。
3. 如果臨時表要使用磁碟,表引擎配置為 InnoDB,那麼即使臨時表在一個時間很短的 SQL 中使用,且使用後即釋放,釋放後也會刷臟頁到磁碟中,消耗部分 IO。