home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 February / PCWK0296.iso / po7_win / db / rdbms71 / prvtpool.sql < prev    next >
Encoding:
Text File  |  1994-08-07  |  4.0 KB  |  115 lines

  1. rem 
  2. rem $Header: prvtpool.sql 7010300.1 94/02/24 18:23:29 snataraj Generic<base> $ 
  3. rem 
  4. Rem  Copyright (c) 1991 by Oracle Corporation 
  5. Rem    NAME
  6. Rem      prvtpool.sql - dbms_shared_pool utility package (private).
  7. Rem    DESCRIPTION
  8. Rem      This package allows you to display the sizes of objects in the 
  9. Rem      shared pool, and mark them for keeping or unkeeping in order to
  10. Rem      reduce memory fragmentation.
  11. Rem    RETURNS
  12. Rem 
  13. Rem    NOTES
  14. Rem    MODIFIED   (MM/DD/YY)
  15. Rem     adowning   02/23/94 -  Branch_for_patch
  16. Rem     adowning   02/23/94 -  Creation
  17. Rem     ajasuja    01/06/94 -  merge changes from branch 1.1.312.1
  18. Rem     rkooi      04/20/93 -  change psdkeep to psdkep 
  19. Rem     ajasuja    11/05/93 -  handle UNIX addresses
  20. Rem     rkooi      12/08/92 -  Creation 
  21.  
  22. Rem DBA_KEEPSIZES - size that will be keeped for a pl/sql object
  23. Rem   For instance, do:
  24. Rem     select * from dba_keepsizes where totsize>30 and owner='SCOTT'
  25. Rem     order by totsize desc;
  26. Rem   to see all PL/SQL objects owned by SCOTT which are larger than 30Kbytes
  27. create or replace view dba_keepsizes (totsize, owner, name) as
  28.   select trunc((sum(parsed_size)+sum(code_size))/1000),
  29.          owner, name
  30.   from dba_object_size
  31.   where type in ('PACKAGE', 'PROCEDURE','FUNCTION','PACKAGE BODY')
  32.   group by owner, name;
  33.  
  34. create or replace package body dbms_shared_pool is
  35.   procedure psdkep(schema varchar2, name varchar2, cursor_addr raw,
  36.                    cursor_hash binary_integer, keep boolean);
  37.   pragma interface(C, psdkep);
  38.   
  39.   procedure doit(name varchar2, keep boolean, flag char) is
  40.     owner      varchar2(30);
  41.     part1      varchar2(30);
  42.     part2      varchar2(30);
  43.     dblink     varchar2(30);
  44.     part1_type number;
  45.     objno      number;
  46.   begin
  47.     if flag <> 'P' and flag <> 'p' then
  48.       psdkep('', '', hextoraw(substr(name,1,8)),
  49.          to_number(substr(name,10)), keep);
  50.     else
  51.       dbms_utility.name_resolve(name, 1, owner, part1, part2, dblink,
  52.                                 part1_type, objno);
  53.       psdkep(owner, part1, null, null, keep);
  54.     end if;
  55.   end;
  56.  
  57.   procedure keep(name varchar2, flag char) is
  58.   begin
  59.     doit(name, TRUE, flag);
  60.   end;
  61.  
  62.   procedure unkeep(name varchar2, flag char) is
  63.   begin
  64.     doit(name, FALSE, flag);
  65.   end;
  66.  
  67.   procedure sizes(minsize number) is
  68.     cursor c1(msize number) is
  69.         select to_char(sharable_mem/1000, '999999') sz,
  70.                decode(kept_versions, 0, '      ',
  71.                  rpad('YES(' || to_char(kept_versions) || ')', 6)) keeped,
  72.                rawtohex(address) || ',' || to_char(hash_value) name,
  73.                substr(sql_text,1,354) extra
  74.         from v$sqlarea
  75.         where sharable_mem > msize*1000
  76.       union
  77.         select to_char(sharable_mem/1000, '999999') sz,
  78.                decode(kept, 'YES', 'YES   ', '      ') keeped,
  79.                owner || '.' || name || lpad(' ', 29 - (length(owner) +
  80.                  length(name))) || '(' || type || ')' name,
  81.                null extra
  82.         from v$db_object_cache v
  83.         where sharable_mem > msize*1000
  84.       order by 1 desc;
  85.     l number;
  86.     i number;
  87.   begin
  88.    dbms_output.put_line('SIZE(K) KEPT   NAME');
  89.    dbms_output.put_line('------- ------ ---------------------------------------------------------------');
  90.     for rec in c1(minsize) loop
  91.       if substr(rec.name,1,1) in ('0','1','2','3','4','5','6','7','8','9') then
  92.         l := length(rec.extra);
  93.         i := 0;
  94.         while i < l loop
  95.           if i = 0 then
  96.             dbms_output.put_line(rec.sz || ' ' || rec.keeped || ' ' ||
  97.                                  substr(rec.extra,i,63));
  98.             i := i + 63;
  99.           else
  100.             dbms_output.put_line('                   ' ||
  101.                                  substr(rec.extra,i,59));
  102.             i := i + 59;
  103.           end if;
  104.         end loop;
  105.         dbms_output.put_line(rpad('                   (' || rec.name ||
  106.                              ')', 45) || '(CURSOR)');
  107.       else
  108.         dbms_output.put_line(rec.sz || ' ' || rec.keeped || ' ' || rec.name);
  109.       end if;
  110.     end loop;
  111.   end;
  112. end;
  113. /
  114.  
  115.