Historie und Abfrage der Größen/Füllstände von Usertabellen

April 20, 2009

Um einen Überblick über die Füllstände von aller Benutzer/UserTabellen im Sybase IQ zu bekommen müsste man für jede Tabelle die Stored Procedure sp_iqtablesize ausführen. Das kann schnell mühsam werden. Mit der folgenden Stored Procedure geht das schneller. Allerdings benötigt die Procedure auch Ressourcen und sollte darum nur ausgeführt werden, wenn der IQ nicht oder nur wenige benutzt wird.

Mit dem beigefügten Event wird die Procedure sp_iqUserTableSize täglich um 1 Uhr Nachts ausgeführt.

--
-- Quelle: http://www.sybinfo.de/asiq/historie-und-abfrage-der-groessen-fuellstaende-von-usertabellen/
--
-- Autor: Frank Massholder
-- Name: sp_iqUserTableSize
-- Das Script ist für den freien Gebrauch "freeware"
-- es wird jedoch keine Garantie darauf gegeben "no warentie"
--
-- Erstelle eine Stored Procdedure, um die Größen/Füllstände der
-- Benutzertabellen im Sybase IQ zu archivieren
--
ALTER PROCEDURE sp_iqUserTableSize
AS
BEGIN
  DECLARE @TableName varchar(64)
  DECLARE @TblName varchar(64)
  DECLARE @TblOwner varchar(64)
  DECLARE @TblSize char(20)
  DECLARE @ControlTblName varchar(64)
  DECLARE @cntTblName int
  DECLARE @i int
  SELECT @TblName = ('TblName')
  SELECT @ControlTblName = ('ControTblName')
  SELECT @cntTblName     = (SELECT count(*) FROM dbo.sp_iqtable())
 
  DECLARE cur_TableName CURSOR FOR
  SELECT table_owner+'.'+table_name
    FROM dbo.sp_iqtable()
      ORDER BY table_owner
        FOR READ ONLY
 
  OPEN cur_TableName
    SET @i = 1
    WHILE (@i <= @cntTblName)
    BEGIN
      FETCH NEXT cur_TableName INTO @TableName
      SELECT @ControlTblName =
      (
        SELECT @TblName
      )
      SELECT @TblName =
      (
        SELECT Tablename
        FROM  dbo.sp_iqtablesize(''+@TableName+'')
      )
      SELECT @TblOwner =
      (
        SELECT Ownername
        FROM  dbo.sp_iqtablesize(''+@TableName+'')
      )
      SELECT @TblSize =
      (
        SELECT KBytes
        FROM  dbo.sp_iqtablesize(''+@TableName+'')
      )
      INSERT INTO DBA.TBL_UserTableSize
      (
          LogDate
        , Ownername
        , Tablename
        , KBytes
      ) VALUES
      (
          getdate()
        , ''+@TblOwner+''
        , ''+@TblName+''
        , ''+@TblSize+''
      )
      -- Wenn die Ausgabe auf dem isql Prompt ausgegeben werden soll,
      -- muss die PRINT-Anweisung auskommentiert werden.
      -- (Hinweis: Verwende für Sybase IQ besser dbisql oder squish als isql)
      -- PRINT @TblOwner || '.' || @TblName || '           SIZE: ' || @TblSize
      SET @i = @i + 1
    END
  CLOSE cur_TableName
  DEALLOCATE CURSOR cur_TableName
  -- Lösche Daten, die älter als ein Jahr sind
  DELETE DBA.TBL_UserTableSize
    WHERE LogDate <= DATEADD(month, -12, getdate())
  COMMIT
END
 

--
-- Erstelle die Tabelle zur Archivierung der täglichen Füllstände aller Usertabellen
--
CREATE TABLE TBL_UserTableSize
  (
    LogDate date
  , Ownername varchar(128) NULL
  , Tablename varchar(128) NULL
  , KBytes char(20)
  )
--
-- Erstelle einen unique Index.
-- Falls die SP händisch ausgeführt wird, verhindert er doppelte
-- Einträge innerhalb eines Tages.
--
CREATE UNIQUE INDEX idx_1 ON DBA.TBL_UserTableSize
  (
    LogDate
  , Ownername
  , Tablename
  )
 
--
-- Quelle: http://www.sybinfo.de/asiq/historie-und-abfrage-der-groessen-fuellstaende-von-usertabellen/
--
-- Autor: Frank Massholder
-- Name: ev_ArcUserTableSize
-- Das Script ist für den freien Gebrauch "freeware"
-- es wird jedoch keine Garantie darauf gegeben "no warentie"
--
-- Erstelle ein Even, das die Stored Procedure einmal täglich
-- um 1 Uhr Nachts ausführt.
--
CREATE EVENT ev_ArcUserTableSize
SCHEDULE START TIME '1:00AM' EVERY 24 HOURS
ON ( 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')
HANDLER
BEGIN
CALL  sp_iqUserTableSize
END
--
-- Ein Select Statement, um die täglichen Größen der User-Tabellen abzufragen.
--
SELECT convert(varchar(15), Ownername), convert(varchar(40), Tablename), KBytes
FROM DBA.TBL_UserTableSize
WHERE LogDate = getdate()
ORDER BY convert(int, KBytes)

Hinweis: Das Script ist kostenlos und steht zur freien Verfügung. Es wird keinerlei Garantie dafür übernommen. Die Ausführung diese Quelltextes bitte erst nach ausgiebigen Tests auf einem Entwicklungs-Server in ein Produktionssystemen einspielen.

Leave Your Comment

You must be logged in to post a comment.

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org