Back in 2006, Mich Talebzadeh created the sp__monusedtables stored procedure for reporting on table usage in Sybase ASE 12.5x using the MDA tables as part of the excellent Extended Stored Procedures by Ed Barlow (AKA the Ed Barlow Stored Procedures). In v15, Sybase deprecated the rowcnt() function that was used to report on the estimated number of rows in favor of the row_count() function. I’ve updated the stored procedure to use the row_count() function.
diff sp__monusedtables.12 sp__monusedtables.15 14,18c14,19 < ------------------------------------------------------------------------------------------------ < -- Vers| Date | Who | DA | Description < -------+--------+--------------------+----+----------------------------------------------------- < -- 1.0 |07/04/06| Mich Talebzadeh | | Reports on table usage via MDA tables < -------+--------+--------------------+----+----------------------------------------------------- --- > -------------------------------------------------------------------------------------------------- > -- Vers| Date | Who | DA | Description > -------+----------+--------------------+----+----------------------------------------------------- > -- 1.1 |11/18/2013| Jason Froebe | | Update to use row_count > -- 1.0 |07/04/2006| Mich Talebzadeh | | Reports on table usage via MDA tables > -------+----------+--------------------+----+----------------------------------------------------- 31a33 > "DBID" = m.DBID, 64c66 < "Rows_in_table" = rowcnt(i.doampg) --- > "Rows_in_table" = row_count(t.DBID, o.id)
USE sybsystemprocs go IF EXISTS(SELECT 1 FROM sysobjects WHERE type = 'P' AND name = 'sp__monusedtables') BEGIN DROP PROCEDURE sp__monusedtables END go CREATE PROCEDURE sp__monusedtables ( @OWNER VARCHAR(30) = NULL, @OBJNAME VARCHAR(30) = NULL ) AS -------------------------------------------------------------------------------------------------- -- Vers| Date | Who | DA | Description -------+----------+--------------------+----+----------------------------------------------------- -- 1.1 |11/18/2013| Jason Froebe | | Update to use row_count -- 1.0 |07/04/2006| Mich Talebzadeh | | Reports on table usage via MDA tables -------+----------+--------------------+----+----------------------------------------------------- BEGIN IF NOT EXISTS( SELECT 1 FROM sysobjects WHERE type = 'U' AND name = ISNULL(@OBJNAME, name) AND USER_NAME(uid) = ISNULL(@OWNER, USER_NAME(uid)) ) BEGIN PRINT "Table: %1!.%2! was not found", @OWNER, @OBJNAME RETURN -1 END SELECT "Owner" = ISNULL(@OWNER, USER_NAME(o.uid)), "DBID" = m.DBID, "TableName" = ISNULL(@OBJNAME, o.name), "LogicalReads" = m.LogicalReads, "LockRequests" = m.LockRequests, "Operations" = m.Operations, "Selected" = m.OptSelectCount, "WhenLastSelected" = m.LastOptSelectDate, "Used" = m.UsedCount, "WhenLastUsed" = m.LastUsedDate, "Inserted" = m.RowsInserted, "Updated" = m.RowsUpdated, "Deleted" = m.RowsDeleted INTO #temp from sysobjects o, master..monOpenObjectActivity m where object_name(m.ObjectID, m.DBID) = o.name and user_name(o.uid) = ISNULL(@OWNER, user_name(o.uid)) and o.name = ISNULL(@OBJNAME, o.name) and o.type = 'U' and o.id = m.ObjectID and m.IndexID = 0 and m.DBID = db_id() and object_name(m.ObjectID, m.DBID) not like 'sa_%' and object_name(m.ObjectID, m.DBID) not like '%__sa%' and object_name(m.ObjectID, m.DBID) not like 'rs_%' --and (m.RowsInserted > 0 or m.RowsUpdated > 0 or m.RowsDeleted > 0) SELECT "Owner" = user_name(o.uid), "TableName" = o.name, "Rows_in_table" = row_count(t.DBID, o.id) INTO #tab1 FROM sysobjects o, sysindexes i, master.dbo.spt_values d, #temp t WHERE user_name(o.uid) = t.Owner and o.name = t.TableName and o.type = 'U' and i.id = o.id and d.number = 1 and d.type = 'E' SELECT Owner, TableName, "RowTotal" = sum(Rows_in_table) INTO #tab2 FROM #tab1 GROUP BY Owner, TableName PRINT "" PRINT "Displaying table statistics" PRINT "" SELECT --t.Owner, t.TableName, "Rows" = b.RowTotal, t.Inserted, t.Updated, t.Deleted, t.LogicalReads, t.LockRequests FROM #temp t, #tab2 b WHERE t.Owner = b.Owner and t.TableName = b.TableName --and t.WhenLastSelected is NOT NULL --and t.WhenLastUsed is NOT NULL --and t.LockRequests = 0 ORDER BY t.Operations END go GRANT ALL ON sp__monusedtables TO PUBLIC go exit