⑴ sql怎麼獲得資料庫緩存空間大小
其實只要使用系統內置的存儲過程sp_spaceused就可以得到表的相關信息
如:sp_spaceused 'tablename'鎮鬧姿
以下是為了方便寫彎孝的一個存儲過程,目的是把當前的所有表的相關信息全部都保存在一個指定的表裡面
CREATE PROCEDURE get_tableinfo AS
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table tablespaceinfo --創建結果存儲表
(nameinfo varchar(50) ,
rowsinfo int , reserved varchar(20) ,
datainfo varchar(20) ,
index_size varchar(20) ,
unused varchar(20) )
delete from tablespaceinfo --清空數據表
declare @tablename varchar(255) --表名稱
declare @cmdsql varchar(500)
DECLARE Info_cursor CURSOR FOR
select o.name
from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1
and o.name not like N'#%%' order by o.name
OPEN Info_cursor
FETCH NEXT FROM Info_cursor
INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
execute sp_executesql
N'insert into tablespaceinfo exec sp_spaceused @tbname',
N'@tbname varchar(255)',
@tbname = @tablename
FETCH NEXT FROM Info_cursor
INTO @tablename
END
CLOSE Info_cursor
DEALLOCATE Info_cursor
GO執行存儲過程
御絕exec get_tableinfo
查詢運行該存儲過程後得到的結果
select *
from tablespaceinfo
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
⑵ 怎麼查看oracle資料庫數據緩沖區大小
日誌緩沖區Log_buffer是Oracle專門用於存入重做日誌的內存區域。
資料庫啟動時,可以看到:
SQL> startup
ORACLE 常式已經啟動。
Total System Global Area 85006980 bytes
Fixed Size 453252 bytes
Variable Size 46137344 bytes
Database Buffers 37748736 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已經打開。
Redo Buffers就是分配給Log_buffer的內存大小。
對日誌緩沖區的大小,可以從下面的視圖中查詢的到:
SQL> select * from v$parameter;
也可以
SQL> show parameter log_buffer
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 524288
從這兒查詢出的數據,是在配置文件中配置的數據,配置文件有:SPFILEORA92.ORA,INITora92.ORA等。
這個值和真實的日誌緩沖區的大小不同。如果要知道真實的Log_buffer的大小,可以用下面的方法查詢:
SQL> select * from v$sgastat where name ='log_buffer';
POOL NAME BYTES
----------- -------------------------- ----------
log_buffer 656384
上面的這個值,是Oracle的SGA實際分配給Log_buffer的大小。
另外,還可以從 v$sga中查詢:
SQL> select * from v$sga;
NAME VALUE
-------------------- ----------
Fixed Size 453252
Variable Size 46137344
Database Buffers 37748736
Redo Buffers 667648
這個值也就是Oracle啟動時分配給Log_buffer的大小。
那這個值為什麼和實際的大小有差別呢?
SQL> select (667648-656384)/1024 ||'K' from al;
(66
---
11K
相差11K,那這11K干什麼用呢?
這11K是Oracle為了保護Log_buffer,分配出來的日誌保護頁。
⑶ 如何清理mysql資料庫緩存數據
1、打開mysql的客戶端來 這里使用源navicat,連接資料庫,等到navicat主頁面,雙擊需要操作的資料庫連接。
⑷ 在PHP中怎麼對數據進行緩存讀取功能
1、普遍緩存技術:
數據緩存:這里所說的數據緩存是指資料庫查詢PHP緩存機制,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接資料庫,得到數據,並把查詢結果序列化後保存到文件中,以後同樣的查詢結果就直接從緩存表或文件中獲得。
用的最廣的例子看Discuz的搜索功能,把結果ID緩存到一個表中,下次搜索相同關鍵字時先搜索緩存表。
舉個常用的方法,多表關聯的時候,把附表中的內容生成數組保存到主表的一個欄位中,需要的時候數組分解一下,這樣的好處是只讀一個表,壞處就是兩個數據同步會多不少步驟,資料庫永遠是瓶頸,用硬碟換速度,是這個的關鍵點。
2、 頁面緩存:
每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接資料庫,得到數據,顯示頁面並同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些PHP緩存機制類通常有此功能)
3、 時間觸發緩存:
檢查文件是否存在並且時間戳小於設置的過期時間,如果文件修改的時間戳比當前時間戳減去過期時間戳大,那麼就用緩存,否則更新緩存。
4、 內容觸發緩存:
當插入數據或更新數據時,強制更新PHP緩存機制。
5、 靜態緩存:
這里所說的靜態緩存是指靜態化,直接生成HTML或XML等文本文件,有更新的時候重生成一次,適合於不太變化的頁面,這就不說了。
以上內容是代碼級的解決方案,我直接CP別的框架,也懶得改,內容都差不多,很容易就做到,而且會幾種方式一起用,但下面的內容是伺服器端的緩存方案,非代碼級的,要有多方的合作才能做到
6、 內存緩存:
Memcached是高性能的,分布式的內存對象PHP緩存機制系統,用於在動態應用中減少資料庫負載,提升訪問速度。
7、 php的緩沖器:
有eaccelerator, apc, phpa,xcache,這個這個就不說了吧,搜索一堆一堆的,自己看啦,知道有這玩意就OK
8、 MYSQL緩存:
這也算非代碼級的,經典的資料庫就是用的這種方式,看下面的運行時間,0.09xxx之類的
9、 基於反向代理的Web緩存:
如Nginx,SQUID,mod_proxy(apache2以上又分為mod_proxy和mod_cache)
⑸ 如何MySQL查詢緩存求答案
當在使用中,查詢緩存會存儲一個 SELECT 查詢的文本與被傳送到客戶端的相應結果。如果之後接收到一個同樣的查詢,伺服器將從查詢緩存中檢索結果,而不是再次分析和執行這個同樣的查詢。
注意:查詢緩存絕不返回過期數據。當數據被修改後,在查詢緩存中的任何相關詞條均被轉儲清除。
在某些表並不經常更改,而你又對它執行大量的相同查詢時,查詢緩存將是非常有用的。對於許多 WEB 伺服器使用大量的動態信息,這是一個很典型的情況。
下面是查詢緩存的一個性能數據。(這些結果的產生,是通過在一個 a Linux Alpha 2 x 500 MHz、2GB RAM 和 64MB 查詢緩存上執行 MySQL 基準套件和到的):
如果你執行的所有查詢均是簡單的(比如從表中一行一行的物薯選取);但是仍然是不同的,所以該查詢不能被緩沖,查詢緩存處於活動時,開銷為 13%。這可以被看作是最差的情況。然而,在實際情況下,查詢是比我們的簡單示例要復雜得多的,所以開銷通常顯著得低。
在只有一行記錄表中搜索一行後,搜索將快 238% 。這可以被認為是接近於對嫌橋一個被緩沖的查詢所期望的最小的加速。
如果你希望禁用芹螞猛查詢緩存,設置 query_cache_size=0。禁用了查詢緩存,將沒有明顯的開銷。(在配置選項 --without-query-cache 的幫助下,查詢緩存可以被排除在外碼之外)
查詢在分析之前先被比較,因而
SELECT * FROM tbl_name和Select * from tbl_name
對於查詢緩存被當作是不同的查詢,因而查詢需要嚴格的一致(位元組對位元組的),才會被認為是同樣的。 另外,如果一個客戶端使用一個新的連接協議格式或不同於其它客戶端的另一個字元集,一個查詢將被視為不同的。
使用不同資料庫的,使用不同協議版本的,或使用不同的預設字元串的查詢將被認為是不同的查詢,並將分別的緩沖。
高速緩沖不對 SELECT CALC_ROWS … 和 SELECT FOUND_ROWS() … 類型的查詢起作用,因為找到的行的數目也是被存儲在緩沖里的。
如果查詢結果被從查詢緩存中返回,那麼狀態變數 Com_select 將不會被增加,但是 Qcache_hits 卻會增加。
查看章節 6.9.4 查詢緩存的狀態和維護。
如果一個表發生的改變 (INSERT, UPDATE, DELETE, TRUNCATE, ALTER 或 DROP TABLE|DATABASE),那麼所有這張表使用的緩沖的查詢(可能通過一個 MRG_MyISAM 表!)將被得失效,並從緩沖中移除。
InnoDB 表的事務所做的更改將在一個 COMMIT 被完成時,使數據失效。
如果一個查詢包括下面的函數,它將不能被緩沖:
函數 函數 函數
User-Defined Functions CONNECTION_ID FOUND_ROWS
GET_LOCK RELEASE_LOCK LOAD_FILE
MASTER_POS_WAIT NOW SYSDATE
CURRENT_TIMESTAMP CURDATE CURRENT_DATE
CURTIME CURRENT_TIME DATABASE
ENCRYPT (只有一個參數調用) LAST_INSERT_ID RAND
UNIX_TIMESTAMP (無參數調用) USER BENCHMARK
如果一個查詢包含用戶變數,引用 MySQL 系統資料庫,或下列之一的格式,SELECT … IN SHARE MODE, SELECT … INTO OUTFILE …, SELECT … INTO DUMPFILE … 或 SELECT * FROM AUTOINCREMENT_FIELD IS NULL (檢索最後一個插入 ID - ODBC 語句),該查詢亦不可以被緩存。
然而,FOUND ROWS() 將返回正確的值,即使先前的查詢是從緩存中讀取的。
萬一一個查詢不使用任何錶,或使用臨時表,或用戶對任何相關表有一個列許可權,那麼查詢將不會被緩存。
在一個查詢從查詢緩存中讀取前,MySQL 將檢查用戶對所有相關的資料庫和表有 SELECT 許可權。