Thursday, January 20, 2011

Report CPU usage over 24 Hours

/* SQL to report CPU usage over 24 Hour period */
/* Make sure the collectintervals set correct */

select TheDate,
cast((cast((TheTime (format '99:99:99')) as char(8))) as time(0)) as TheTime,
(sum(CPUIdle) / TOTAL_CPU) * 100 AS CPUIdle,
(sum(CPUIoWait) / TOTAL_CPU) * 100 AS CPUIoWait,
(sum(CPUUServ) / TOTAL_CPU) * 100 AS CPUUServ,
(sum(CPUUExec) / TOTAL_CPU) * 100 AS CPUUExec,
SUM(CPUIdle + CPUIoWait + CPUUServ + CPUUExec) AS TOTAL_CPU,
(avg(CPUUServ + CPUUExec) / max(CPUUServ + CPUUExec)) * 100 AS CPUBusyParallelEff
from dbc.resusagespma
where thedate >= date - 1 and
collectintervals = '10'
group by 1,2
order by 1,2
;

Labels: , , , , ,

SQL to check Cylinder Migration

/* SQL to check Cylinder Migration */
/* make sure the collectintervals value is set correct */

SELECT TheDate,
CAST((CAST((TheTime (FORMAT '99:99:99')) AS CHAR(8))) AS TIME(0)) AS TheTime,
SUM(FileCylAllocs),
SUM(FileCylMigrs),
SUM(FileMCylPacks),
SUM(FileCylDefrags),
(AVG(FileCylMigrs) / MAX(FileCylMigrs)) * 100 AS VprocCylMigrsParallelEff
FROM dbc.resusagesvpr
WHERE collectintervals = '2' AND
vprtype = 'AMP'
GROUP BY 1,2
ORDER BY 1,2
;

Labels: , , , ,

Thursday, July 08, 2010

Find Invalid views

The below SQL can be used to identify invalid views .. (extract from the Unix script ..)

select 'select 1 from ${DATABASENAME}.'||TRIM(TableName)||' where 1 = 2; //
.IF ERRORCODE <> 0 THEN INSERT INTO temp_db.invalid_views values(''${DATABASENAME}'','''||TRIM(TableName)||''');' (TITLE '') from dbc.tables
where databasename = '${DATABASENAME}';

TPERF per user

Below script helps to check the amount of TPERF being used by a user. The eg. below uses 246 as the system TPERF, you have to change this to reflect your systems value.

SELECT dlt.UserName

,dlt.LogDate

/* Identify total CPU time used by queries executed by user for logdate */

,SUM(dlt.AMPCPUTime+ dlt.ParserCPUTime) AS Sum_CPUTime

/* Identify impact CPU time (ie to account for skew imbalance) used by queries executed by user for logdate */

,SUM((dlt.MaxAMPCPUTime*(HASHAMP()+1))+ dlt.ParserCPUTime) AS Sum_ImpactCPUTime

/* Identify total TPerfhours used by queries executed by user for logdate where system TPerf is 246 in this eg. */

,(Sum_ImpactCPUTime * 246.00) / (64.00 * 3600.00) AS Sum_ImpactTPerfHour

/* Remove 10% of avail TPerf for OS overhead */

,246.00 * 24 * 0.90 AS Sum_AvailTPerfHour


FROM dbqlogtbl_hst dlt


WHERE dlt.LogDate > CURRENT_DATE -95

AND dlt.UserName LIKE ANY ( 'UserName' )

GROUP BY 1,2

;

Labels: , , ,

Tuesday, June 22, 2010

Script to create base views (1 to 1 views)

SELECT
CASE WHEN ROW_NUMBER() OVER(PARTITION BY TABLENAME ORDER BY COLUMNID)=1
THEN 'REPLACE VIEW '||TRIM(DATABASENAME)||'_VIEW.'||TRIM(TABLENAME)||'
AS LOCKING ROW FOR ACCESS
SELECT '||TRIM(COLUMNNAME)
WHEN ROW_NUMBER() OVER(PARTITION BY TABLENAME ORDER BY COLUMNID DESC)=1
THEN ','||TRIM(COLUMNNAME)||' FROM '||TRIM(DATABASENAME)||'.'||TRIM(TABLENAME)||';'
ELSE ','||TRIM(COLUMNNAME)
END
FROM DBC.COLUMNS
WHERE DATABASENAME=
ORDER BY TABLENAME,COLUMNID;

Labels: ,

Monday, April 19, 2010

Releasing Online archive lock (V12)

One of our dictionary online backup failed due to not enough space in NETVAULT_CATALOG database. We used the below script to release the lock ..

.LOGON user/pwd;

LOGGING ONLINE ARCHIVE OFF FOR ("DBC") ALL;

RELEASE LOCK
("DBC") ALL;

.LOGOFF;

Pls make sure you run the script as (arcmain < release_lock.arc). The above did not work in the interactive mode.

Wednesday, April 14, 2010

Day of week SQL

There are different ways you could get this info ..

1.
SELECT CASE WHEN (DATE - DATE '1900-01-01') MOD 7 = 0 THEN 'Monday'
WHEN (DATE - DATE '1900-01-01') MOD 7 = 1 THEN 'Tuesday'
WHEN (DATE - DATE '1900-01-01') MOD 7 = 2 THEN 'Wednesday'
WHEN (DATE - DATE '1900-01-01') MOD 7 = 3 THEN 'Thursday'
WHEN (DATE - DATE '1900-01-01') MOD 7 = 4 THEN 'Friday'
WHEN (DATE - DATE '1900-01-01') MOD 7 = 5 THEN 'Saturday'
WHEN (DATE - DATE '1900-01-01') MOD 7 = 6 THEN 'Sunday'
END AS DAY_OF_WEEK;

2.
SELECT day_of_week FROM sys_calendar.calendar WHERE calendar_date = DATE;

3.
SELECT
SUBSTRING('Monday Tuesday Wednesday Thursday Friday Saturday Sunday '
FROM (1+10*((DATE - DATE '1900-01-01') MOD 7)) FOR 10)
AS DAY_OF_WEEK;

Labels: , ,

Wednesday, March 04, 2009

New Line Char in SQLAssistant

The '0D0A'xc char represents new line ..

SELECT 'ABC'|| '0D0A'xc || 'def'

Wednesday, December 17, 2008

Adding seconds to a Time Stamp

select current_time, current_time + interval '02' second;