Tag Archives: Database Maintenance

MS SQL Notes – Database Management Scripts

最近有機會去接觸公司的Database
可以幫忙performance tuning
很可惜在之前的公司沒有好好的記下一些有用的script
今日想和大家分享一些有用的Database Management script
和用來check Database 的東西
以下有兩個網頁
https://ola.hallengren.com/

這個提供了一些SQL Server Backup, Integrity Check, and Index and Statistics Maintenance的script/解決建議
Script 可以在這裡下載
https://ola.hallengren.com/scripts/MaintenanceSolution.sql
SQL Server Maintenance Solution


http://whoisactive.com/
提供了script來幫助 Monitor SQL Server
去到網頁入面便可以download之後在 SQL Server Management Studio上執行便可以安裝這些script了
sp_whoisactives

有時間再和大家介紹他們的use case

Hope you find it useful

TSQL Get size of all tables in database – TSQL 查詢Table佔用了多小空間

在整理公司的Database 其間發現公司的其中一個Database 的 MDF 檔 799GB 大
之後發現入面有很多用來做Backup的Table
是Developer 有時貪方便
便使用 INSERT INTO z_TableName
來Backup Table 之後便留下了很多的佔有空間的Table 又未必有用 便在這個Database 上

或些有時候有些Table存有很多 舊的Data..又可能不常用
所以希望找一個Query來 查詢在Database上的Table佔有多小空間 和用了多小Row
有多小空間 Provision了 但是沒有用.. 那我們可以考慮使用一些 TSQL CommandReclaim/釋放 那些空間

解決方法十分簡單
我們可以使用這個Query便可以了

SELECT 
    t.NAME AS TableName,
    s.Name AS SchemaName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8/ 1024.00 AS TotalSpaceMB, 
    SUM(a.used_pages) * 8 /1024.00AS UsedSpaceMB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8/1024.00 AS UnusedSpaceMB
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    t.Name

TSQL Show All space used in Database per table
Hope you find it useful

Microsoft SQL Server Check If Full-Text Search is Installed – 如何查詢 SQL Server上的 Full Index Search 是否已經安裝

最近忙於將公司的 Database由舊的Server Migrate到新的 Environment
舊的DBA當然很小心地沒有留下任何 Notes 他怎麼設定舊的Database
所以這次Migration有很多東西都要自己摸索

在設定時安裝程式問..要不是安裝 Full Text Search..
我真是不清楚舊的Server有沒有安裝.. 只是知道沒有使用過這個Feature
做了一會research之後發現
其實是可以用Query來查詢這些設定的
我們可以使用以下我Query來查詢 SQL Server上的 Full Index Search 是否已經安裝

SELECT FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')

SQL Server Full Text Search Info
以下的Query可以提供更多的資訊

SELECT * FROM sys.fulltext_catalogs

Hope you find it useful

TSQL Get Index Size Per Table – 如何使用TSQL 來查詢每一個Table上 每一個Index 佔用的空間大小

今天想和大家分享如何使用TSQL 來查詢每一個Table上 每一個Index 佔用的空間大小
這個可以令大家明白Database 的空間有多小放在Index上
明白更多..應該有幫助吧

解決方法
我們可以使用以下的Query 來查詢 每一個Table上 每一個Index 佔用的空間大小

SELECT
OBJECT_NAME(i.OBJECT_ID) AS TableName,
i.name AS IndexName,
i.index_id AS IndexID,
8 * SUM(a.used_pages) AS 'Indexsize(KB)',
8 * SUM(a.used_pages) / 1024.00 AS 'Indexsize(MB)'
FROM sys.indexes AS i
JOIN sys.partitions AS p ON p.OBJECT_ID = i.OBJECT_ID AND p.index_id = i.index_id
JOIN sys.allocation_units AS a ON a.container_id = p.partition_id
GROUP BY i.OBJECT_ID,i.index_id,i.name
ORDER BY OBJECT_NAME(i.OBJECT_ID),i.index_id

TSQL Get Individual Index SizeHope you find it useful

SQL Server Check last accessed Database Table – 如何找出Database 的Table上最後被查詢的時間

公司上有很多 Legacy / 舊有的Database 由于同事離開始於時沒有好好交代
所以便有很多在Database Server上存在的Database 但是又沒大人知道有沒有任何Application 會連接的

今天想和大家分享一個SQL Script有來查詢某一個Database最後一次被就Query/Update的時間
解決放法十分簡單

首先我們需要先選擇想查詢的Database
之後我們可以使用 以下的SQL Script 來看看 last_user_seek, last_user_scan, last_user_lookup 的內容
看看他們的更改時間

SELECT    OBJECT_NAME(object_id) AS TableName,
last_user_update, last_user_seek, last_user_scan, last_user_lookup
FROM    sys.dm_db_index_usage_stats
WHERE    database_id = DB_ID()

SQL Server check which is the Last Accessed Table
Hope you find it useful

解決Transaction Log is Full的問題 – Full Recovery Mode

之前介紹過  – 如何解決Transaction Log is Full的問題 – Simple Recovery Mode

今天想和大家介紹怎樣解決Transaction Log is Full的問題 – Full Recovery Mode
原來DatabaseRecovery Mode 設定為 “Full”的時候

即使做了Database Full Backup 也不能解決Transaction Log is Full的問題

其實解決方法十分簡單 和之前的網誌的解決方法差不多

唯一改變的是 “Backup type:” 選擇 “Transaction Log

E.G.
SQL Server Management StudioDatabase 上Right Click
之後選擇”Task“->”Backup
SSMS -> Backup Database

在”Back Up Database 對話方塊” 上 的 “Backup type:” 選擇 “Transaction Log
Backup Transaction Log - SSMS
之後選擇Backup 到的地點..按OK 便可以了

Hope you find it useful

解決Transaction Log is Full的問題 – Simple Recovery Mode

經過一會兒學習之後..終於學會了怎樣好好地解決Transaction Log Is Full的問題

之前和大家介紹過
怎樣取得Transaction Log的大小資訊
E.G. Transaction Log的檔案大小和用了多小真實空間

TSQL – How to Get the Transaction Log Size -MSSQL

今天想和大家介紹怎樣解決
如果你的DatabaseSimple Mode的話

你們只需要把Database 做一個Full Backup便可以解決這個問題了

SQL Server Management StudioDatabase 上Right Click
之後選擇”Task“->”Backup
SSMS -> Backup Database

在”Back Up Database 對話方塊” 上 的 “Backup type:” 選擇 “Full
Backup Database Dialogue Box
之後選擇Backup 到的地點..按OK 便可以了

Hope you find it useful