2026-03-12 20:23:15
This commit is contained in:
25
tpt/.gitignore
vendored
Normal file
25
tpt/.gitignore
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# Logs
|
||||
*.log
|
||||
*.tmp
|
||||
logs/*
|
||||
tmp/*
|
||||
!tmp/.gitkeep
|
||||
!logs/.gitkeep
|
||||
|
||||
# build files
|
||||
*.pyc
|
||||
|
||||
# OS generated files #
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# vim tmp files
|
||||
**/*~
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
5
tpt/46off.sql
Normal file
5
tpt/46off.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
alter session set events '10046 trace name context off'
|
||||
/
|
||||
5
tpt/46on.sql
Normal file
5
tpt/46on.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
alter session set events '10046 trace name context forever, level &1'
|
||||
/
|
||||
6
tpt/53off.sql
Normal file
6
tpt/53off.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
prompt alter session set events '10053 trace name context off';;
|
||||
|
||||
alter session set events '10053 trace name context off';
|
||||
8
tpt/53on.sql
Normal file
8
tpt/53on.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
prompt alter session set events '10053 trace name context forever, level 1';;
|
||||
prompt alter session set "_optimizer_trace"=all;;
|
||||
|
||||
alter session set events '10053 trace name context forever, level 1';
|
||||
alter session set "_optimizer_trace"=all;
|
||||
41
tpt/53trace.sql
Normal file
41
tpt/53trace.sql
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
Purpose:
|
||||
|
||||
generate an optimizer trace from the cursor cache. Removes the need to
|
||||
purge the cursor or force a hard parse
|
||||
*/
|
||||
|
||||
PRO
|
||||
PRO Generate an optimizer trace from the cursor cache
|
||||
PRO
|
||||
|
||||
ACC v_sql_id PROMPT 'Enter your SQL ID: '
|
||||
|
||||
PRO checking cursor cache for SQL ID &v_sql_id
|
||||
|
||||
select sql_id, plan_hash_value, child_number from gv$sql where sql_id = '&v_sql_id';
|
||||
|
||||
ACC v_child_number PROMPT 'Enter the child cursor number: '
|
||||
|
||||
BEGIN
|
||||
sys.DBMS_SQLDIAG.DUMP_TRACE(
|
||||
p_sql_id => '&v_sql_id',
|
||||
p_child_number => &v_child_number,
|
||||
p_component => 'Compiler'
|
||||
);
|
||||
END;
|
||||
/
|
||||
|
||||
select 'Trace file: ' || value tracefile from v$diag_info where name like 'Def%';
|
||||
220
tpt/LICENSE.txt
Normal file
220
tpt/LICENSE.txt
Normal file
@@ -0,0 +1,220 @@
|
||||
Copyright 2018 Tanel Poder
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
15
tpt/README.md
Normal file
15
tpt/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Tanel Poder's Troubleshooting Scripts (TPT)
|
||||
|
||||
These sqlplus scripts are for Oracle Database performance optimization & troubleshooting.
|
||||
Most of the scripts should be runnable directly from SQL Developer too.
|
||||
|
||||
### Getting Started & Videos
|
||||
|
||||
To get an idea of how I set up my client environment and use some of my main Oracle-related scripts, check out the videos here:
|
||||
|
||||
* [https://www.youtube.com/tanelpoder](https://www.youtube.com/tanelpoder)
|
||||
|
||||
Also you can follow me in Twitter as I'll post any noteworthy updates there:
|
||||
|
||||
* [https://twitter.com/tanelpoder](https://twitter.com/tanelpoder)
|
||||
|
||||
25
tpt/a.sql
Normal file
25
tpt/a.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
prompt A-Script: Display CURRENT active sessions...
|
||||
|
||||
select
|
||||
count(*)
|
||||
, sql_id
|
||||
, case state when 'WAITING' then 'WAITING' else 'ON CPU' end state
|
||||
, case state when 'WAITING' then event else 'On CPU / runqueue' end event
|
||||
from
|
||||
v$session
|
||||
where
|
||||
status='ACTIVE'
|
||||
and type !='BACKGROUND'
|
||||
and wait_class != 'Idle'
|
||||
and sid != (select sid from v$mystat where rownum=1)
|
||||
group by
|
||||
sql_id
|
||||
, case state when 'WAITING' then 'WAITING' else 'ON CPU' end
|
||||
, case state when 'WAITING' then event else 'On CPU / runqueue' end
|
||||
order by
|
||||
count(*) desc
|
||||
/
|
||||
|
||||
6
tpt/acc.sql
Normal file
6
tpt/acc.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
prompt alter session set session_cached_cursors=&1;;
|
||||
alter session set session_cached_cursors=&1
|
||||
/
|
||||
12
tpt/alog.sql
Normal file
12
tpt/alog.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
COL originating_timestamp FOR a25
|
||||
COL message_text FOR a100
|
||||
|
||||
SELECT to_char(originating_timestamp, 'yyyy-mm-dd hh24:mi:ss') AS originating_timestamp, message_text, container_name
|
||||
FROM v$diag_alert_ext
|
||||
WHERE component_id = 'rdbms'
|
||||
AND originating_timestamp BETWEEN &1 AND &2
|
||||
ORDER BY originating_timestamp;
|
||||
|
||||
CLEAR COLUMNS
|
||||
5
tpt/aon.sql
Normal file
5
tpt/aon.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
set autotrace trace stat
|
||||
|
||||
42
tpt/aot/06_libcache_deadlock.sql
Normal file
42
tpt/aot/06_libcache_deadlock.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- Script written based on Alex Nuijten's finding:
|
||||
-- http://nuijten.blogspot.com/2015/06/deadlock-with-virtual-column.html
|
||||
--
|
||||
-- This should be reproducible all the way up to 12.1.0.2 versions (like the Oracle 12cR1 Developer VM)
|
||||
|
||||
DROP TABLE t_dl;
|
||||
CREATE TABLE t_dl AS SELECT dummy a, rownum b FROM dual;
|
||||
|
||||
CREATE OR REPLACE FUNCTION VC (p_a in t_dl.a%TYPE ,p_b in t_dl.b%TYPE) RETURN VARCHAR2 DETERMINISTIC
|
||||
IS
|
||||
BEGIN
|
||||
RETURN p_a || p_b;
|
||||
END vc;
|
||||
/
|
||||
|
||||
ALTER TABLE t_dl ADD c AS (vc (a, b));
|
||||
|
||||
TRUNCATE TABLE t_dl;
|
||||
|
||||
|
||||
-- Back in Oracle 9i days you could have used this too (not anymore):
|
||||
|
||||
-- SQL> CREATE OR REPLACE PROCEDURE p1 AS BEGIN p2; END;
|
||||
-- 2 /
|
||||
--
|
||||
-- Warning: Procedure created with compilation errors.
|
||||
--
|
||||
-- SQL>
|
||||
-- SQL> CREATE OR REPLACE PROCEDURE p2 AS BEGIN p1; END;
|
||||
-- 2 /
|
||||
--
|
||||
-- Warning: Procedure created with compilation errors.
|
||||
--
|
||||
-- SQL> ALTER PROCEDURE p1 COMPILE;
|
||||
-- ALTER PROCEDURE p1 COMPILE
|
||||
-- *
|
||||
-- ERROR at line 1:
|
||||
-- ORA-04020: deadlock detected while trying to lock object SYS.P1
|
||||
|
||||
23
tpt/aot/06_self_deadlock.sql
Normal file
23
tpt/aot/06_self_deadlock.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SET TIMING ON
|
||||
|
||||
DROP TABLE t_lock;
|
||||
CREATE TABLE t_lock AS SELECT * FROM dual;
|
||||
|
||||
@pd enqueue_deadlock
|
||||
|
||||
DECLARE
|
||||
PROCEDURE p IS
|
||||
PRAGMA AUTONOMOUS_TRANSACTION;
|
||||
j VARCHAR2(100);
|
||||
BEGIN
|
||||
--UPDATE t_lock SET dummy = 'Z';
|
||||
SELECT dummy INTO j FROM t_lock FOR UPDATE WAIT 6;
|
||||
END;
|
||||
BEGIN
|
||||
UPDATE t_lock SET dummy = 'Z';
|
||||
p();
|
||||
END;
|
||||
/
|
||||
7
tpt/aot/README.txt
Normal file
7
tpt/aot/README.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Advanced Oracle Troubleshooting course scripts by Tanel Poder
|
||||
|
||||
DON'T JUST RUN THE SCRIPTS HERE WITHOUT CHECKING WHAT THEY DO!
|
||||
DON'T TEST THESE SCRIPTS IN PRODUCTION!
|
||||
|
||||
These scripts are designed to cause trouble, so that they could be troubleshooted.
|
||||
|
||||
28
tpt/aot/bh_private.sql
Normal file
28
tpt/aot/bh_private.sql
Normal file
@@ -0,0 +1,28 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
col bhla_object head object for a40 truncate
|
||||
col bhla_DBA head DBA for a20
|
||||
col flg_lruflg head "FLAG:LRUFLAG"
|
||||
|
||||
select /*+ ORDERED */
|
||||
trim(to_char(bh.flag, 'XXXXXXXX')) ||':'||
|
||||
trim(to_char(bh.lru_flag, 'XXXXXXXX')) flg_lruflg,
|
||||
bh.obj,
|
||||
o.object_type,
|
||||
o.owner||'.'||o.object_name bhla_object,
|
||||
bh.tch,
|
||||
file# ||' '||dbablk bhla_DBA,
|
||||
bh.class,
|
||||
bh.state,
|
||||
bh.mode_held,
|
||||
bh.dirty_queue DQ
|
||||
from
|
||||
x$bh bh,
|
||||
dba_objects o
|
||||
where
|
||||
bh.obj = o.data_object_id
|
||||
and bitand(flag,8)=8
|
||||
order by
|
||||
tch asc
|
||||
/
|
||||
4105
tpt/aot/bigcomment.sql
Normal file
4105
tpt/aot/bigcomment.sql
Normal file
File diff suppressed because it is too large
Load Diff
14713
tpt/aot/bigp.sql
Normal file
14713
tpt/aot/bigp.sql
Normal file
File diff suppressed because it is too large
Load Diff
469
tpt/aot/bigsql.sql
Normal file
469
tpt/aot/bigsql.sql
Normal file
@@ -0,0 +1,469 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
DELETE FROM t
|
||||
WHERE 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1
|
||||
/
|
||||
|
||||
39
tpt/aot/cbchammer.sh
Normal file
39
tpt/aot/cbchammer.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com
|
||||
# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
# usage: ./cbchammer <num_loops>
|
||||
|
||||
# schema creation:
|
||||
#
|
||||
# CREATE TABLE cbchammer (a INT);
|
||||
# INSERT INTO cbchammer VALUES (1);
|
||||
# INSERT INTO cbchammer VALUES (2);
|
||||
# COMMIT;
|
||||
# EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'CBCHAMMER')
|
||||
|
||||
|
||||
CONN=system/oracle@linux01/linprd
|
||||
|
||||
|
||||
SQL_CMD="
|
||||
CONNECT $CONN
|
||||
ALTER SESSION SET plsql_optimize_level = 0;
|
||||
DECLARE
|
||||
x NUMBER;
|
||||
BEGIN
|
||||
FOR I IN 1 .. $1 LOOP
|
||||
SELECT a INTO x FROM cbchammer WHERE ROWNUM = 1;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
"
|
||||
|
||||
while true
|
||||
do
|
||||
#printf "$SQL_CMD"
|
||||
printf "$SQL_CMD" | sqlplus -s /nolog
|
||||
#sleep 0.1
|
||||
done
|
||||
|
||||
53
tpt/aot/cbchammer2.sh
Normal file
53
tpt/aot/cbchammer2.sh
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com
|
||||
# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
# usage: ./cbchammer2 <num_loops>
|
||||
# notes:
|
||||
# the updated version will do an exclusive CBC get every 1000 loop iterations for long-running tasks
|
||||
# so if you schedule only 1000 loop iterations per connect, these guys will do just shared gets
|
||||
# after 1000th iteration we consider the task long running and they will start doing a select for update
|
||||
# with exclusive CBC get every 1000 iterations
|
||||
#
|
||||
# schema creation:
|
||||
#
|
||||
# CREATE TABLE cbchammer (a INT);
|
||||
# INSERT INTO cbchammer VALUES (1);
|
||||
# INSERT INTO cbchammer VALUES (2);
|
||||
# COMMIT;
|
||||
# EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'CBCHAMMER')
|
||||
|
||||
|
||||
CONN=system/oracle@linux01/linprd
|
||||
|
||||
|
||||
SQL_CMD="
|
||||
CONNECT $CONN
|
||||
ALTER SESSION SET plsql_optimize_level = 0;
|
||||
DECLARE
|
||||
x NUMBER;
|
||||
BEGIN
|
||||
FOR i IN 1 .. $1 LOOP
|
||||
IF i / 1000 <= 1 THEN
|
||||
SELECT a INTO x FROM cbchammer WHERE a = 1;
|
||||
ELSE
|
||||
IF MOD(i,1000) = 0 THEN
|
||||
SELECT a INTO x FROM cbchammer WHERE a = 2 FOR UPDATE;
|
||||
COMMIT WRITE NOWAIT;
|
||||
ELSE
|
||||
SELECT a INTO x FROM cbchammer WHERE a = 1;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
"
|
||||
|
||||
while true
|
||||
do
|
||||
#printf "$SQL_CMD"
|
||||
printf "$SQL_CMD" | sqlplus -s /nolog
|
||||
#sleep 0.1
|
||||
done
|
||||
|
||||
103
tpt/aot/demo1.sql
Normal file
103
tpt/aot/demo1.sql
Normal file
@@ -0,0 +1,103 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: demo1.sql
|
||||
--
|
||||
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
|
||||
-- Depending on the speed of LGWR IO will cause the session to wait
|
||||
-- for log buffer space and log switch wait events (demo works
|
||||
-- ok on a single hard disk laptop, probably will not wait so much
|
||||
-- on a server with write cached storage)
|
||||
--
|
||||
-- Author: Tanel Poder ( http://www.tanelpoder.com )
|
||||
-- Copyright: (c) Tanel Poder
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
prompt Initializing Demo1...
|
||||
|
||||
set feedback off termout off
|
||||
|
||||
drop table t;
|
||||
drop table t2;
|
||||
|
||||
create table t tablespace users as select * from dba_source;
|
||||
create table t2 tablespace users as select * from dba_source where 1=0;
|
||||
|
||||
alter system switch logfile;
|
||||
alter system switch logfile;
|
||||
|
||||
set termout on
|
||||
--prompt Taking Statspack report...
|
||||
--EXEC statspack.snap
|
||||
|
||||
prompt Starting Demo1 (running a "batch job")
|
||||
set termout off
|
||||
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
|
||||
commit;
|
||||
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
|
||||
commit;
|
||||
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
insert into t2 select * from t;
|
||||
|
||||
commit;
|
||||
|
||||
|
||||
set termout on
|
||||
|
||||
prompt "Batch job" finished...
|
||||
--prompt Taking Statspack report...
|
||||
--EXEC statspack.snap
|
||||
|
||||
|
||||
55
tpt/aot/demo11.sql
Normal file
55
tpt/aot/demo11.sql
Normal file
@@ -0,0 +1,55 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- Bug 12345717 - ORA-600 [13013] or hang/spin from MERGE into table with added column [ID 12345717.8]
|
||||
--
|
||||
-- ORA-600 [13013] can occur when executing a MERGE statement
|
||||
-- with an UPDATE clause into a table which has had an ADD COLUMN
|
||||
-- executed against it with a DEFAULT value with add column
|
||||
-- optimization enabled.
|
||||
--
|
||||
--
|
||||
-- Rediscovery Notes:
|
||||
-- ORA-600 [13013] on a MERGE SQL.
|
||||
-- In some cases this problem can also show up as a spin
|
||||
-- executing a MERGE SQL against a table with an added column.
|
||||
--
|
||||
-- In both cases the problem can occur only if the target table has
|
||||
-- a NOT NULL added column with a default value.
|
||||
-- You can check this with SQL of the form below which shows such columns:
|
||||
-- select owner, object_name, name
|
||||
-- from dba_objects, col$
|
||||
-- where bitand(col$.PROPERTY,1073741824)=1073741824
|
||||
-- and object_id=obj#;
|
||||
--
|
||||
-- Workaround
|
||||
-- Set _add_col_optim_enabled=false before adding columns
|
||||
-- (this can cause the ADD COLUMN DDL to take longer as
|
||||
-- all rows need updating)
|
||||
-- For existing tables set the parameter then rebuild the table
|
||||
-- to remove any existing optimized columns.
|
||||
|
||||
-- DROP TABLE tab1;
|
||||
-- DROP TABLE tab2;
|
||||
|
||||
CREATE TABLE TAB1 ( ID_NACE NUMBER(5) );
|
||||
ALTER TABLE TAB1 ADD (
|
||||
ID_INDUSTRY NUMBER(5) DEFAULT -1 NOT NULL
|
||||
);
|
||||
insert into TAB1 values(1, 1);
|
||||
insert into TAB1 values(2, 2);
|
||||
|
||||
CREATE TABLE TAB2 (
|
||||
ID_NACE NUMBER(5),
|
||||
ID_INDUSTRY NUMBER(5)
|
||||
);
|
||||
insert into TAB2 values(1, 3);
|
||||
commit;
|
||||
|
||||
MERGE /*+ LEADING(c) */
|
||||
INTO TAB1 c
|
||||
USING (SELECT * from TAB2 b) a
|
||||
ON (c.id_nace=a.id_nace)
|
||||
WHEN matched THEN
|
||||
UPDATE SET c.ID_INDUSTRY=a.ID_INDUSTRY;
|
||||
|
||||
36
tpt/aot/demo1a.sql
Normal file
36
tpt/aot/demo1a.sql
Normal file
@@ -0,0 +1,36 @@
|
||||
-- demo1
|
||||
-- the idea is to show that "slow sessions" do not always spend majority of time
|
||||
-- actively working in the database, but spend time waiting for the application
|
||||
-- to send the next command (application think time)
|
||||
|
||||
SET TIMING ON
|
||||
SET ARRAYSIZE 15
|
||||
SET APPINFO ON
|
||||
|
||||
PROMPT Running Report...
|
||||
SET AUTOTRACE TRACE STAT
|
||||
|
||||
-- a "simple report" that returns lots of records
|
||||
SELECT * FROM soe.customers WHERE credit_limit > 10;
|
||||
|
||||
--SELECT /*+ NO_PARALLEL */
|
||||
-- c.customer_id
|
||||
-- , c.cust_first_name ||' '||c.cust_last_name
|
||||
-- , c.credit_limit
|
||||
--FROM
|
||||
-- soe.orders o
|
||||
-- , soe.order_items oi
|
||||
-- , soe.customers c
|
||||
--WHERE
|
||||
---- join conditions
|
||||
-- c.customer_id = o.customer_id
|
||||
--AND o.order_id = oi.order_id
|
||||
---- constant filter conditions
|
||||
--AND c.customer_id BETWEEN 100000 AND 200000
|
||||
----AND c.dob BETWEEN DATE'2000-01-01' AND DATE'2001-01-01'
|
||||
--AND o.order_mode = 'online'
|
||||
--AND o.order_status = 5
|
||||
--/
|
||||
|
||||
SET AUTOTRACE OFF
|
||||
|
||||
106
tpt/aot/demo2.sql
Normal file
106
tpt/aot/demo2.sql
Normal file
@@ -0,0 +1,106 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: demo2.sql
|
||||
--
|
||||
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
|
||||
-- Makes a single fetch to generate lots of LIOs by
|
||||
-- nested looping over full table scans.
|
||||
-- Requires lotslios.sql script from TPT scripts.
|
||||
--
|
||||
-- Author: Tanel Poder ( http://www.tanelpoder.com )
|
||||
-- Copyright: (c) Tanel Poder
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
prompt Starting Demo2...
|
||||
|
||||
-- @@lotslios 1000000000000
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: demos/bind_peeking_nested_loops.sql
|
||||
-- Purpose: this script demos how a "wrong" bind variable value
|
||||
-- can cause an execution plan to be compiled which is
|
||||
-- very inefficient for the next execution with different bind variable
|
||||
-- values (with large number of matching rows)
|
||||
-- the second execution of the query takes very long time to complete
|
||||
-- despite adaptive bind variable peeking, which would kick in during the
|
||||
-- next (3rd) execution
|
||||
--
|
||||
-- This problem happens even on Oracle 11.2 despite adaptive bind peeking
|
||||
-- and cardinality feedback (due design, not a bug)
|
||||
--
|
||||
-- Author: Tanel Poder (tanel@e2sn.com)
|
||||
-- Copyright: (c) http://tech.e2sn.com
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
|
||||
CREATE TABLE t1 AS SELECT * FROM dba_objects;
|
||||
CREATE TABLE t2 AS SELECT * FROM dba_objects;
|
||||
CREATE TABLE t3 AS SELECT * FROM dba_objects;
|
||||
|
||||
CREATE INDEX i1 ON t1(owner);
|
||||
CREATE INDEX i2 ON t2(owner);
|
||||
CREATE INDEX i3 ON t3(owner);
|
||||
|
||||
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
|
||||
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
|
||||
EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254');
|
||||
|
||||
ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=1;
|
||||
|
||||
VAR v VARCHAR2(100)
|
||||
|
||||
EXEC :v:='SCOTT'
|
||||
|
||||
SET TIMING ON
|
||||
|
||||
--PROMPT Running query first time, this should be fast (and should use nested loops execution plan)
|
||||
|
||||
SELECT
|
||||
MIN(t1.created), MAX(t1.created)
|
||||
FROM
|
||||
t1
|
||||
, t2
|
||||
, t3
|
||||
WHERE
|
||||
t1.object_id = t2.object_id
|
||||
AND t2.object_id = t3.object_id
|
||||
AND t1.owner = :v
|
||||
AND t2.owner = :v
|
||||
AND t3.owner = :v
|
||||
/
|
||||
|
||||
SET TIMING OFF
|
||||
|
||||
--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED'));
|
||||
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null));
|
||||
|
||||
EXEC :v:='SYS'
|
||||
|
||||
SET TIMING ON
|
||||
|
||||
PROMPT Running the "report"...
|
||||
--PROMPT Now running the same query with different bind variables (this query should take very long time)
|
||||
|
||||
SELECT
|
||||
MIN(t1.created), MAX(t1.created)
|
||||
FROM
|
||||
t1
|
||||
, t2
|
||||
, t3
|
||||
WHERE
|
||||
t1.object_id = t2.object_id
|
||||
AND t2.object_id = t3.object_id
|
||||
AND t1.owner = :v
|
||||
AND t2.owner = :v
|
||||
AND t3.owner = :v
|
||||
/
|
||||
|
||||
39
tpt/aot/demo2a.sql
Normal file
39
tpt/aot/demo2a.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: demo2a.sql
|
||||
--
|
||||
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
|
||||
-- Will cause some recursive dynamic sampling activity
|
||||
-- that does not show up in V$SESSION and ASH
|
||||
--
|
||||
-- Uses SwingBench Order Entry schema table (but you can use
|
||||
-- any other large table for testing this effect).
|
||||
--
|
||||
-- Requires Oracle 11.2 or lower (12c works slightly differently)
|
||||
--
|
||||
-- Author: Tanel Poder ( http://tanelpoder.com )
|
||||
-- Copyright: (c) Tanel Poder
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
prompt Starting Demo2a...
|
||||
|
||||
set echo on
|
||||
|
||||
ALTER SYSTEM FLUSH SHARED_POOL;
|
||||
|
||||
SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1;
|
||||
SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1;
|
||||
SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1;
|
||||
|
||||
ALTER SYSTEM FLUSH SHARED_POOL;
|
||||
|
||||
SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1;
|
||||
SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1;
|
||||
SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1;
|
||||
|
||||
set echo off
|
||||
|
||||
52
tpt/aot/demo3.sql
Normal file
52
tpt/aot/demo3.sql
Normal file
@@ -0,0 +1,52 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: demo3.sql
|
||||
--
|
||||
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
|
||||
-- Causes a session hang by reading from external table
|
||||
-- which in turn reads from a Unix named pipe. Before 11.1.0.7
|
||||
-- this wait was uninstrumented.
|
||||
--
|
||||
-- Author: Tanel Poder ( http://www.tanelpoder.com )
|
||||
-- Copyright: (c) Tanel Poder
|
||||
--
|
||||
-- Notes: Meant to be executed from an Unix/Linux Oracle DB server
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
prompt Running demo3...
|
||||
|
||||
set feedback off termout off
|
||||
|
||||
CREATE OR REPLACE DIRECTORY mydir AS '/tmp';
|
||||
|
||||
host rm -f /tmp/myfile
|
||||
|
||||
host mknod /tmp/myfile p
|
||||
|
||||
DROP TABLE mytab;
|
||||
|
||||
CREATE TABLE mytab (
|
||||
a int
|
||||
)
|
||||
ORGANIZATION EXTERNAL (
|
||||
TYPE oracle_loader
|
||||
DEFAULT DIRECTORY mydir
|
||||
ACCESS PARAMETERS (
|
||||
RECORDS DELIMITED BY NEWLINE
|
||||
FIELDS TERMINATED BY ','
|
||||
(a)
|
||||
)
|
||||
LOCATION ('myfile')
|
||||
)
|
||||
/
|
||||
|
||||
select * from mytab;
|
||||
|
||||
set feedback on termout on
|
||||
|
||||
drop table mytab;
|
||||
|
||||
131
tpt/aot/demo4.sql
Normal file
131
tpt/aot/demo4.sql
Normal file
@@ -0,0 +1,131 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: demo4.sql
|
||||
--
|
||||
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
|
||||
-- Causes optimizer to loop in CBO code for very long time
|
||||
--
|
||||
-- Author: Tanel Poder ( http://www.tanelpoder.com )
|
||||
-- Copyright: (c) Tanel Poder
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
prompt Starting demo4...
|
||||
|
||||
set termout off feedback off
|
||||
|
||||
drop table t;
|
||||
|
||||
create table t as select * from all_objects where 1=0;
|
||||
|
||||
exec dbms_stats.gather_table_stats(user,'T');
|
||||
alter session set "_optimizer_search_limit"=100;
|
||||
|
||||
select *
|
||||
from
|
||||
t t1
|
||||
,t t2
|
||||
,t t3
|
||||
,t t4
|
||||
,t t5
|
||||
,t t6
|
||||
,t t7
|
||||
,t t8
|
||||
,t t9
|
||||
,t t10
|
||||
,t t11
|
||||
,t t12
|
||||
,t t13
|
||||
,t t14
|
||||
,t t15
|
||||
,t t16
|
||||
,t t17
|
||||
,t t18
|
||||
,t t19
|
||||
,t t20
|
||||
,t t21
|
||||
,t t22
|
||||
,t t23
|
||||
,t t24
|
||||
,t t25
|
||||
,t t26
|
||||
,t t27
|
||||
,t t28
|
||||
,t t29
|
||||
,t t30
|
||||
,t t31
|
||||
,t t32
|
||||
,t t33
|
||||
,t t34
|
||||
,t t35
|
||||
,t t36
|
||||
,t t37
|
||||
,t t38
|
||||
,t t39
|
||||
,t t40
|
||||
,t t41
|
||||
,t t42
|
||||
,t t43
|
||||
,t t44
|
||||
,t t45
|
||||
,t t46
|
||||
,t t47
|
||||
,t t48
|
||||
,t t49
|
||||
,t t50
|
||||
,t t51
|
||||
,t t52
|
||||
,t t53
|
||||
,t t54
|
||||
,t t55
|
||||
,t t56
|
||||
,t t57
|
||||
,t t58
|
||||
,t t59
|
||||
,t t60
|
||||
,t t61
|
||||
,t t62
|
||||
,t t63
|
||||
,t t64
|
||||
,t t65
|
||||
,t t66
|
||||
,t t67
|
||||
,t t68
|
||||
,t t69
|
||||
,t t70
|
||||
,t t71
|
||||
,t t72
|
||||
,t t73
|
||||
,t t74
|
||||
,t t75
|
||||
,t t76
|
||||
,t t77
|
||||
,t t78
|
||||
,t t79
|
||||
,t t80
|
||||
,t t81
|
||||
,t t82
|
||||
,t t83
|
||||
,t t84
|
||||
,t t85
|
||||
,t t86
|
||||
,t t87
|
||||
,t t88
|
||||
,t t89
|
||||
,t t90
|
||||
,t t91
|
||||
,t t92
|
||||
,t t93
|
||||
,t t94
|
||||
,t t95
|
||||
,t t96
|
||||
,t t97
|
||||
,t t98
|
||||
,t t99
|
||||
/
|
||||
|
||||
set termout on feedback on
|
||||
|
||||
131
tpt/aot/demo4_ora600.sql
Normal file
131
tpt/aot/demo4_ora600.sql
Normal file
@@ -0,0 +1,131 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: demo4_ora600.sql
|
||||
--
|
||||
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
|
||||
-- Causes optimizer to loop in CBO code for very long time
|
||||
-- OR an ORA-600 crash on Oracle 12.1.0.2 (fixed in 12.2)
|
||||
--
|
||||
-- Author: Tanel Poder ( http://www.tanelpoder.com )
|
||||
-- Copyright: (c) Tanel Poder
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
prompt Starting demo4...
|
||||
|
||||
drop table t;
|
||||
|
||||
-- use this (table with a number of rows) for ORA-600 testing on 12.1.0.2
|
||||
create table t as select * from all_objects;
|
||||
|
||||
exec dbms_stats.gather_table_stats(user,'T');
|
||||
alter session set "_optimizer_search_limit"=100;
|
||||
|
||||
select *
|
||||
from
|
||||
t t1
|
||||
,t t2
|
||||
,t t3
|
||||
,t t4
|
||||
,t t5
|
||||
,t t6
|
||||
,t t7
|
||||
,t t8
|
||||
,t t9
|
||||
,t t10
|
||||
,t t11
|
||||
,t t12
|
||||
,t t13
|
||||
,t t14
|
||||
,t t15
|
||||
,t t16
|
||||
,t t17
|
||||
,t t18
|
||||
,t t19
|
||||
,t t20
|
||||
,t t21
|
||||
,t t22
|
||||
,t t23
|
||||
,t t24
|
||||
,t t25
|
||||
,t t26
|
||||
,t t27
|
||||
,t t28
|
||||
,t t29
|
||||
,t t30
|
||||
,t t31
|
||||
,t t32
|
||||
,t t33
|
||||
,t t34
|
||||
,t t35
|
||||
,t t36
|
||||
,t t37
|
||||
,t t38
|
||||
,t t39
|
||||
,t t40
|
||||
,t t41
|
||||
,t t42
|
||||
,t t43
|
||||
,t t44
|
||||
,t t45
|
||||
,t t46
|
||||
,t t47
|
||||
,t t48
|
||||
,t t49
|
||||
,t t50
|
||||
,t t51
|
||||
,t t52
|
||||
,t t53
|
||||
,t t54
|
||||
,t t55
|
||||
,t t56
|
||||
,t t57
|
||||
,t t58
|
||||
,t t59
|
||||
,t t60
|
||||
,t t61
|
||||
,t t62
|
||||
,t t63
|
||||
,t t64
|
||||
,t t65
|
||||
,t t66
|
||||
,t t67
|
||||
,t t68
|
||||
,t t69
|
||||
,t t70
|
||||
,t t71
|
||||
,t t72
|
||||
,t t73
|
||||
,t t74
|
||||
,t t75
|
||||
,t t76
|
||||
,t t77
|
||||
,t t78
|
||||
,t t79
|
||||
,t t80
|
||||
,t t81
|
||||
,t t82
|
||||
,t t83
|
||||
,t t84
|
||||
,t t85
|
||||
,t t86
|
||||
,t t87
|
||||
,t t88
|
||||
,t t89
|
||||
,t t90
|
||||
,t t91
|
||||
,t t92
|
||||
,t t93
|
||||
,t t94
|
||||
,t t95
|
||||
,t t96
|
||||
,t t97
|
||||
,t t98
|
||||
,t t99
|
||||
/
|
||||
|
||||
set termout on feedback on
|
||||
|
||||
29
tpt/aot/demo5.sql
Normal file
29
tpt/aot/demo5.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: demo5.sql
|
||||
--
|
||||
-- Purpose: Advanced Oracle Troubleshooting Seminar demo script
|
||||
-- Causes a session hang by creating a pipe instead of a tracefile
|
||||
-- and enabling tracing then
|
||||
--
|
||||
-- Author: Tanel Poder ( http://www.tanelpoder.com )
|
||||
-- Copyright: (c) Tanel Poder
|
||||
--
|
||||
-- Notes: Meant to be executed from an Unix/Linux Oracle DB server
|
||||
-- Requires the TPT toolset login.sql to be executed (via putting
|
||||
-- TPT directory into SQLPATH) so that &trc variable would be
|
||||
-- initialized with tracefile name.
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
prompt Starting demo5...
|
||||
|
||||
host mknod &trc p
|
||||
|
||||
alter session set sql_trace=true;
|
||||
|
||||
select * from dual;
|
||||
|
||||
12
tpt/aot/demo6.sql
Normal file
12
tpt/aot/demo6.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- on 10.2.0.1
|
||||
-- doesn't work in all cases...
|
||||
|
||||
set feedback off termout off
|
||||
alter session set optimizer_mode=first_rows;
|
||||
|
||||
select * from dba_lock_internal;
|
||||
|
||||
set feedback on termout on
|
||||
33
tpt/aot/demo7.sql
Normal file
33
tpt/aot/demo7.sql
Normal file
@@ -0,0 +1,33 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- from metalink bug 2456257
|
||||
|
||||
-- drop table fact;
|
||||
|
||||
create table fact (
|
||||
id number primary key,
|
||||
col01 number, col02 number, col03 number, col04 number,
|
||||
col05 number, col06 number, col07 number, col08 number,
|
||||
col09 number, col10 number, col11 number, col12 number,
|
||||
col13 number, col14 number, col15 number, col16 number,
|
||||
col17 number, col18 number, col19 number, col20 number,
|
||||
dat01 number, dat02 number, dat03 number, dat04 number,
|
||||
dat05 number, dat06 number, dat07 number, dat08 number,
|
||||
dat09 number, dat10 number
|
||||
);
|
||||
|
||||
|
||||
select
|
||||
id,
|
||||
col01, col02, col03, col04, col05, col06, col07, col08, col09, col10,
|
||||
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
|
||||
sum(dat01), sum(dat02), sum(dat03), sum(dat04), sum(dat05),
|
||||
sum(dat06), sum(dat07), sum(dat08), sum(dat09), sum(dat10)
|
||||
from
|
||||
fact
|
||||
group by cube ( id,
|
||||
col01, col02, col03, col04, col05, col06, col07, col08, col09, col10,
|
||||
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20
|
||||
);
|
||||
|
||||
48
tpt/aot/demo8.sql
Normal file
48
tpt/aot/demo8.sql
Normal file
@@ -0,0 +1,48 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- test case from http://forums.oracle.com/forums/thread.jspa?threadID=2228426
|
||||
--
|
||||
-- When I choose a high_value > 100000 the grouping query runs < 1 sec.
|
||||
-- With high_value = 100000: < 1 sec
|
||||
-- With high_value = 90000: < 1 sec
|
||||
-- With high_value = 80000: 3 sec
|
||||
-- With high_value = 70000: 9 sec
|
||||
-- With high_value = 60000: 17 sec
|
||||
-- With high_value = 50000: 28 sec
|
||||
-- With high_value = 40000: 34 sec
|
||||
-- With high_value = 30000: 47 sec
|
||||
-- With high_value = 20000: 61 sec
|
||||
-- With high_value = 10000: 76 sec
|
||||
-- With high_value = 1: 102 sec
|
||||
|
||||
|
||||
|
||||
set verify off
|
||||
undefine high_value
|
||||
|
||||
drop table test_interval_p1_&&high_value;
|
||||
|
||||
create table test_interval_p1_&high_value
|
||||
partition by range (id)
|
||||
interval (1)
|
||||
(partition test_p1 values less than (&high_value))
|
||||
as
|
||||
select 100000 id
|
||||
, t.*
|
||||
from all_objects t
|
||||
where 1 = 0;
|
||||
|
||||
insert into test_interval_p1_&high_value
|
||||
select 100000 id
|
||||
, t.*
|
||||
from all_objects t;
|
||||
|
||||
commit;
|
||||
|
||||
-- pause
|
||||
|
||||
select id, count(*)
|
||||
from test_interval_p1_&high_value
|
||||
group by id;
|
||||
|
||||
19
tpt/aot/demo9.sql
Normal file
19
tpt/aot/demo9.sql
Normal file
@@ -0,0 +1,19 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
|
||||
drop table a;
|
||||
drop table b;
|
||||
|
||||
create table A(col11 number, col12 number);
|
||||
create table B(col21 number, col22 number);
|
||||
|
||||
insert into a values (-3,-7);
|
||||
insert into a values (null,-1);
|
||||
insert into b values ( -7,-3);
|
||||
|
||||
update a set col11 =
|
||||
(select avg(b.col22) keep (dense_rank first order by (col22))
|
||||
FROM b where b.col21= a.col12)
|
||||
/
|
||||
|
||||
25
tpt/aot/disable_throttle.sh
Normal file
25
tpt/aot/disable_throttle.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright 2020 Tanel Poder. All rights reserved.
|
||||
# Licensed under the Apache License, Version 2.0.
|
||||
|
||||
# Purpose: disable I/O throttling for a block device using cgroups
|
||||
#
|
||||
# Usage: find block device major:minor numbers using ls -l /dev or lsblk
|
||||
# ./disable_throttle.sh <major:minor>
|
||||
# ./disable_throttle.sh 259:3
|
||||
#
|
||||
# More info at https://tanelpoder.com
|
||||
|
||||
DEVICE_ID=$1
|
||||
DEVICE_IOPS=0
|
||||
DEVICE_BPS=0
|
||||
|
||||
echo $DEVICE_ID $DEVICE_IOPS > /sys/fs/cgroup/blkio/blkio.throttle.write_iops_device
|
||||
echo $DEVICE_ID $DEVICE_IOPS > /sys/fs/cgroup/blkio/blkio.throttle.read_iops_device
|
||||
|
||||
echo $DEVICE_ID $DEVICE_BPS > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
|
||||
echo $DEVICE_ID $DEVICE_BPS > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device
|
||||
|
||||
grep . /sys/fs/cgroup/blkio/blkio.throttle*device
|
||||
|
||||
25
tpt/aot/enable_throttle.sh
Normal file
25
tpt/aot/enable_throttle.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright 2020 Tanel Poder. All rights reserved.
|
||||
# Licensed under the Apache License, Version 2.0.
|
||||
|
||||
# Purpose: enable I/O throttling for a block device using cgroups
|
||||
#
|
||||
# Usage: find block device major:minor numbers using ls -l /dev or lsblk
|
||||
# ./enable_throttle.sh <major:minor> <max_iops> <max_bps>
|
||||
# ./enable_throttle.sh 259:3 500 100000000
|
||||
#
|
||||
# More info at https://tanelpoder.com
|
||||
|
||||
DEVICE_ID=$1
|
||||
DEVICE_IOPS=$2
|
||||
DEVICE_BPS=$3
|
||||
|
||||
echo $DEVICE_ID $DEVICE_IOPS > /sys/fs/cgroup/blkio/blkio.throttle.write_iops_device
|
||||
echo $DEVICE_ID $DEVICE_IOPS > /sys/fs/cgroup/blkio/blkio.throttle.read_iops_device
|
||||
|
||||
echo $DEVICE_ID $DEVICE_BPS > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
|
||||
echo $DEVICE_ID $DEVICE_BPS > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device
|
||||
|
||||
grep . /sys/fs/cgroup/blkio/blkio.throttle*device
|
||||
|
||||
13
tpt/aot/failed_parse_loop.sql
Normal file
13
tpt/aot/failed_parse_loop.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
-- ALTER SESSION SET plsql_optimize_level=0;
|
||||
|
||||
VAR n NUMBER
|
||||
BEGIN
|
||||
LOOP
|
||||
BEGIN
|
||||
EXECUTE IMMEDIATE 'select count(*) into :n from nonexistent'||TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1,1000000)));
|
||||
EXCEPTION WHEN OTHERS THEN NULL;
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
9
tpt/aot/fatal_bg_proc.sql
Normal file
9
tpt/aot/fatal_bg_proc.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
-- a simple script for (hopefully) showing just the "fatal" background
|
||||
-- processes. when these processes disappear, it will bring the whole
|
||||
-- database instance down. other processes are typically just restarted
|
||||
|
||||
SELECT indx,ksuprpnm,TO_CHAR(ksuprflg,'XXXXXXXXXXXXXXXX')
|
||||
FROM x$ksupr
|
||||
WHERE BITAND(ksuprflg,4) = 4 ORDER BY indx
|
||||
/
|
||||
|
||||
30
tpt/aot/fulltrace.sql
Normal file
30
tpt/aot/fulltrace.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(binds=>TRUE, waits=>TRUE);
|
||||
ALTER SESSION SET EVENTS '10051 trace name context forever, level 1';
|
||||
ORADEBUG SETMYPID
|
||||
ORADEBUG TRACEFILE_NAME
|
||||
-- ORA-10079: trace data sent/received via SQL*Net
|
||||
ORADEBUG EVENT 10079 TRACE NAME CONTEXT FOREVER, LEVEL 1;
|
||||
|
||||
-- looks like this event disabled in newer Oracle versions when using ALTER SESSION:
|
||||
--
|
||||
-- SQL> ALTER SESSION SET EVENTS '10079 trace name context forever, level 1';
|
||||
-- ERROR:
|
||||
-- ORA-01031: insufficient privileges
|
||||
--
|
||||
-- This is to prevent users with a simple ALTER SESSION privilege from setting
|
||||
-- events that could expose sensitive data or crash/hang the system
|
||||
-- MOS note: ORA-1031 When Setting The Event 10079 (or how to set event 10079 in session) (Doc ID 2199860.1)
|
||||
--
|
||||
-- An alternative would be to use:
|
||||
-- ORADEBUG SETMYPID
|
||||
-- ORADEBUG DUMP SQLNET_SERVER_TRACE 16
|
||||
|
||||
-- trace wait event stack traces (this will slow stuff down)
|
||||
--
|
||||
-- ALTER SESSION SET EVENTS 'wait_event[all] trace(''event="%" ela=% p1=% p2=% p3=%\n'', evargs(5), evargn(1), evargn(2), evargn(3), evargn(4))';
|
||||
|
||||
-- trace enqueue gets (ksq)
|
||||
-- ALTER SESSION SET EVENTS '10704 trace name context forever, level 4';
|
||||
|
||||
-- trace rowcache gets (kqr)
|
||||
-- ALTER SESSION SET EVENTS '10222 trace name context forever, level 15';
|
||||
10
tpt/aot/hang.sh
Normal file
10
tpt/aot/hang.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
sqlplus $1 @hang_1.sql &
|
||||
sleep 3
|
||||
sqlplus $1 @hang_2.sql &
|
||||
sleep 3
|
||||
sqlplus $1 @hang_3.sql &
|
||||
sleep 3
|
||||
sqlplus $1 @hang_4.sql &
|
||||
|
||||
3
tpt/aot/hang_1.sql
Normal file
3
tpt/aot/hang_1.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
DELETE FROM t1 WHERE rownum = 1;
|
||||
|
||||
EXEC dbms_lock.sleep(9999999)
|
||||
4
tpt/aot/hang_2.sql
Normal file
4
tpt/aot/hang_2.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
DELETE FROM t2 WHERE rownum = 1;
|
||||
LOCK TABLE t3 IN SHARE MODE;
|
||||
DELETE FROM t1;
|
||||
|
||||
2
tpt/aot/hang_3.sql
Normal file
2
tpt/aot/hang_3.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
UPDATE t4 SET owner = 'X' WHERE rownum <= 100;
|
||||
UPDATE t3 SET owner = 'X' WHERE rownum <= 100;
|
||||
1
tpt/aot/hang_4.sql
Normal file
1
tpt/aot/hang_4.sql
Normal file
@@ -0,0 +1 @@
|
||||
UPDATE t4 SET object_id = object_id + 1 WHERE object_id = 500;
|
||||
1
tpt/aot/hang_run.sql
Normal file
1
tpt/aot/hang_run.sql
Normal file
@@ -0,0 +1 @@
|
||||
@&1
|
||||
15
tpt/aot/hang_setup.sql
Normal file
15
tpt/aot/hang_setup.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
DROP TABLE t5;
|
||||
|
||||
CREATE TABLE t1 AS SELECT * FROM dba_objects WHERE object_id IS NOT NULL;
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
CREATE TABLE t3 AS SELECT * FROM t1;
|
||||
CREATE TABLE t4 AS SELECT * FROM t1;
|
||||
CREATE TABLE t5 AS SELECT * FROM t1;
|
||||
|
||||
ALTER TABLE t1 ADD PRIMARY KEY (object_id);
|
||||
|
||||
|
||||
23
tpt/aot/hash.sql
Normal file
23
tpt/aot/hash.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
col aot_hash_owner head OWNER for a12
|
||||
col aot_hash_name head NAME word_wrap for a30
|
||||
col aot_hash_dblink head DBLINK for a12
|
||||
|
||||
SELECT
|
||||
kglnaown aot_hash_OWNER
|
||||
, kglnaobj aot_hash_NAME
|
||||
, kglnadlk aot_hash_DBLINK
|
||||
, kglnahsh HASH_VALUE
|
||||
, TO_CHAR(kglnahsh, 'xxxxxxxx') HASH_HEX
|
||||
, kglnahsv MD5_HASH
|
||||
, kglobt03 SQL_ID
|
||||
, kglobt30 PLAN_HASH
|
||||
, kglobt31 LIT_HASH
|
||||
, kglobt46 OLD_HASH
|
||||
FROM
|
||||
x$kglob
|
||||
WHERE
|
||||
lower(kglnaobj) like lower('&1')
|
||||
/
|
||||
29
tpt/aot/hash_demo.sql
Normal file
29
tpt/aot/hash_demo.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
prompt Dropping and creating users...
|
||||
|
||||
drop user a cascade;
|
||||
drop user aa cascade;
|
||||
|
||||
set echo on
|
||||
|
||||
create user A identified by x;
|
||||
create user AA identified by x;
|
||||
alter user a quota unlimited on users;
|
||||
alter user aa quota unlimited on users;
|
||||
|
||||
-- about to create two tables under different usernames...
|
||||
pause
|
||||
|
||||
create table A.AA(a int);
|
||||
create table AA.A(a int);
|
||||
|
||||
-- about to run @aot/hash <object_name> commands for both tables...
|
||||
pause
|
||||
|
||||
set echo off
|
||||
|
||||
@aot/hash a
|
||||
@aot/hash aa
|
||||
|
||||
78
tpt/aot/insert_loop.sql
Normal file
78
tpt/aot/insert_loop.sql
Normal file
@@ -0,0 +1,78 @@
|
||||
COL c1 FOR A20
|
||||
|
||||
--DROP TABLE sys.tbind;
|
||||
--CREATE TABLE sys.tbind (c1 VARCHAR2(4000), c2 NUMBER, c3 NUMBER, c4 NUMBER, c5 NUMBER);
|
||||
--DROP TABLE system.tbind;
|
||||
--CREATE TABLE system.tbind (c1 VARCHAR2(4000), c2 VARCHAR2(4000), c3 VARCHAR2(4000), c4 VARCHAR2(4000), c5 VARCHAR2(4000));
|
||||
|
||||
VAR b1 VARCHAR2(10)
|
||||
VAR b2 NUMBER
|
||||
VAR b3 NUMBER
|
||||
VAR b4 NUMBER
|
||||
VAR b5 NUMBER
|
||||
|
||||
EXEC :b1 := 'A'
|
||||
EXEC :b2 := 1;
|
||||
-- b3-b5 are NULL
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
VAR b1 VARCHAR2(33)
|
||||
EXEC :b1 := 'A'
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
VAR b1 VARCHAR2(129)
|
||||
EXEC :b1 := 'A'
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
VAR b1 VARCHAR2(2001)
|
||||
EXEC :b1 := 'A'
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
VAR b1 VARCHAR2(4000)
|
||||
EXEC :b1 := 'A'
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
VAR b1 CHAR
|
||||
EXEC :b1 := 'A'
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
VAR b1 NCHAR
|
||||
EXEC :b1 := 'A'
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
ALTER SESSION SET current_schema = SYSTEM;
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
ALTER SESSION SET nls_date_format = 'YYYY:MM:DD';
|
||||
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5);
|
||||
|
||||
--@sqlid gbusbc081f8m4 %
|
||||
--@nonshared gbusbc081f8m4 %
|
||||
|
||||
29
tpt/aot/kill_cpu.sql
Normal file
29
tpt/aot/kill_cpu.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
prompt
|
||||
prompt Jonathan Lewis'es kill_cpu script
|
||||
prompt
|
||||
|
||||
set termout off
|
||||
|
||||
--drop table kill_cpu;
|
||||
|
||||
create table kill_cpu (n, primary key(n)) organization index
|
||||
as
|
||||
select rownum n
|
||||
from all_objects
|
||||
where rownum <= 50
|
||||
;
|
||||
|
||||
set termout on echo on
|
||||
|
||||
alter session set "_old_connect_by_enabled"=true;
|
||||
|
||||
select count(*) X
|
||||
from kill_cpu
|
||||
connect by n > prior n
|
||||
start with n = 1
|
||||
;
|
||||
|
||||
set echo off
|
||||
24
tpt/aot/lookup_cbc.sql
Normal file
24
tpt/aot/lookup_cbc.sql
Normal file
@@ -0,0 +1,24 @@
|
||||
-- Cause CBC latch contention
|
||||
|
||||
-- CREATE TABLE lookup AS SELECT * FROM dba_objects
|
||||
-- WHERE object_id IS NOT NULL
|
||||
-- AND rownum <= 50;
|
||||
--
|
||||
-- CREATE INDEX idx_lookup ON lookup(object_id);
|
||||
-- ALTER TABLE lookup ADD CONSTRAINT pk_lookup PRIMARY KEY (object_id);
|
||||
--
|
||||
-- @gts lookup
|
||||
|
||||
ALTER SESSION SET plsql_optimize_level = 0;
|
||||
|
||||
VAR x NUMBER
|
||||
|
||||
BEGIN
|
||||
LOOP
|
||||
SELECT data_object_id INTO :x
|
||||
FROM lookup
|
||||
WHERE object_id IN (10,-1,-2,-3,-4,-5,-6,-7,-8,-9);
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
23
tpt/aot/matching_lock_type_wait.sql
Normal file
23
tpt/aot/matching_lock_type_wait.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- show which locks' id1/id2 columns have matching columns in v$session_wait/ASH
|
||||
|
||||
select /*+ leading(e) */
|
||||
e.name
|
||||
, lt.type
|
||||
, lt.id1_tag
|
||||
, lt.id2_tag
|
||||
, lt.description lock_description
|
||||
from
|
||||
v$lock_type lt
|
||||
, v$event_name e
|
||||
where
|
||||
substr(e.name, 6,2) = lt.type
|
||||
and e.parameter2 = lt.id1_tag
|
||||
and e.parameter3 = lt.id2_tag
|
||||
and e.name like 'enq: %'
|
||||
order by
|
||||
e.name
|
||||
/
|
||||
|
||||
12
tpt/aot/nonsharing_child.sql
Normal file
12
tpt/aot/nonsharing_child.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
VAR n NUMBER
|
||||
|
||||
DECLARE
|
||||
scn NUMBER;
|
||||
BEGIN
|
||||
scn := dbms_flashback.GET_SYSTEM_CHANGE_NUMBER;
|
||||
LOOP
|
||||
SELECT COUNT(*) INTO :n FROM t AS OF SCN scn;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
24
tpt/aot/optimizer_bug.sql
Normal file
24
tpt/aot/optimizer_bug.sql
Normal file
@@ -0,0 +1,24 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
CREATE TABLE t AS SELECT * FROM dba_objects;
|
||||
CREATE INDEX i1 ON t(owner);
|
||||
CREATE INDEX i2 ON t(owner,object_name);
|
||||
CREATE INDEX i3 ON t(owner,subobject_name);
|
||||
CREATE INDEX i4 ON t(owner,object_id);
|
||||
CREATE INDEX i5 ON t(owner,data_object_id);
|
||||
CREATE INDEX i6 ON t(owner,object_type);
|
||||
CREATE INDEX i7 ON t(owner,created);
|
||||
CREATE INDEX i8 ON t(owner,last_ddl_time);
|
||||
CREATE INDEX i9 ON t(owner,timestamp);
|
||||
CREATE INDEX i10 ON t(owner,status);
|
||||
|
||||
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T',NULL,100,METHOD_OPT=>'FOR ALL COLUMNS SIZE 254');
|
||||
|
||||
SELECT * FROM t
|
||||
WHERE owner IN (SELECT owner FROM t GROUP BY owner HAVING count(*) > 1)
|
||||
AND owner NOT IN (SELECT owner FROM t WHERE owner NOT LIKE 'S%')
|
||||
;
|
||||
|
||||
41
tpt/aot/ora4031.sql
Normal file
41
tpt/aot/ora4031.sql
Normal file
@@ -0,0 +1,41 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- metalink bug 7340448
|
||||
-- oracle 10.2.0.4
|
||||
|
||||
drop table t;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
||||
|
||||
create table t ( pat varchar2(10) );
|
||||
|
||||
begin
|
||||
for i in 1 .. 1000 loop
|
||||
insert into t values('abcdedghi');
|
||||
end loop;
|
||||
end;
|
||||
/
|
||||
|
||||
commit;
|
||||
|
||||
create table t1 ( pk number , val varchar2(100) );
|
||||
|
||||
begin
|
||||
for i in 1 .. 1000 loop
|
||||
insert into t1 values(i,'a');
|
||||
end loop;
|
||||
end;
|
||||
/
|
||||
|
||||
commit;
|
||||
|
||||
create table t2 as
|
||||
select /*+ USE_NL(t) ordered */
|
||||
pk, val, pat
|
||||
from
|
||||
t1,t
|
||||
where
|
||||
regexp_like(val,pat)
|
||||
/
|
||||
32
tpt/aot/pga_dbms_output.sql
Normal file
32
tpt/aot/pga_dbms_output.sql
Normal file
@@ -0,0 +1,32 @@
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
|
||||
BEGIN
|
||||
FOR x IN 1..&1*10 LOOP
|
||||
DBMS_OUTPUT.PUT_LINE(LPAD('x',100,'x'));
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
SET SERVEROUT OFF
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE ('...')
|
||||
|
||||
|
||||
SET SERVEROUT ON
|
||||
|
||||
-> DBMS_OUTPUT.ENABLE(1000000)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA)
|
||||
|
||||
DBMS_OUTPUT.GET_LINES(.....)
|
||||
|
||||
|
||||
51
tpt/aot/pga_memleak.sql
Normal file
51
tpt/aot/pga_memleak.sql
Normal file
@@ -0,0 +1,51 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- Bug 16855783 : MEMORY LEAK IN PGA ON INSERT OF XMLTYPE COLUMN
|
||||
SET sqlblanklines ON;
|
||||
SET serveroutput ON;
|
||||
|
||||
--drop table memleak_test_tab;
|
||||
--CREATE TABLE memleak_test_tab (my_xmltype XMLTYPE);
|
||||
|
||||
DECLARE
|
||||
l_my_varchar2 VARCHAR2(4001 CHAR); -- change this to CLOB and there will be a reduced memory leak.
|
||||
--l_my_varchar2 CLOB;
|
||||
l_pga_used_mb NUMBER;
|
||||
l_dummy NUMBER;
|
||||
l_my_xmltype XMLTYPE;
|
||||
BEGIN
|
||||
-- build XML string with length of 4001 characters.
|
||||
l_my_varchar2 := '<abc>';
|
||||
FOR i IN 1 .. (4000/20) - 10
|
||||
LOOP
|
||||
l_my_varchar2 := l_my_varchar2 || '<def>1234567890</def>'; -- reduce string size by removing final 0
|
||||
END LOOP;
|
||||
l_my_varchar2 := l_my_varchar2 || '</abc>';
|
||||
dbms_output.put_line('Input string length: [' || LENGTH(l_my_varchar2) || ']');
|
||||
|
||||
-- repeatedly insert the same value in a table (XMLType column)
|
||||
l_my_xmltype := XMLTYPE(l_my_varchar2);
|
||||
FOR i IN 1 .. 5000
|
||||
LOOP
|
||||
-- l_my_xmltype := XMLTYPE(l_my_varchar2);
|
||||
INSERT INTO memleak_test_tab (my_xmltype)
|
||||
VALUES (l_my_xmltype);
|
||||
|
||||
-- following insert throws ORA-1461 which I suppose is also a bug
|
||||
-- ORA-1461: can bind a LONG value only for insert into a LONG column
|
||||
-- INSERT INTO memleak_test_tab (my_xmltype)
|
||||
-- VALUES (XMLTYPE(l_my_varchar2));
|
||||
END LOOP;
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
-- Check how much memory are we currently using
|
||||
SELECT round(p.pga_used_mem/1024/1024, 2) INTO l_pga_used_mb
|
||||
FROM v$session s
|
||||
JOIN v$process p ON p.addr = s.paddr
|
||||
WHERE s."SID"=sys_context('userenv', 'sid');
|
||||
dbms_output.put_line('Currently used PGA: [' || l_pga_used_mb || '] MB');
|
||||
END;
|
||||
/
|
||||
|
||||
26
tpt/aot/report_sp_chunk_durations.sql
Normal file
26
tpt/aot/report_sp_chunk_durations.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
prompt
|
||||
prompt WARNING!!! This script will query X$KSMSP, which will cause heavy shared pool latch contention
|
||||
prompt in systems under load and with large shared pool. This may even completely hang
|
||||
prompt your instance until the query has finished! You probably do not want to run this in production!
|
||||
prompt
|
||||
pause Press ENTER to continue, CTRL+C to cancel...
|
||||
|
||||
COL chunk_comment FOR A20
|
||||
BREAK ON ksmchdur SKIP 1 DUPLICATES
|
||||
|
||||
SELECT
|
||||
ksmchdur
|
||||
, ksmchcls
|
||||
, SUBSTR(ksmchcom,1,DECODE(INSTR(ksmchcom,'^'),0,99,INSTR(ksmchcom,'^'))) chunk_comment
|
||||
, COUNT(*),MIN(ksmchsiz),MAX(ksmchsiz),SUM(ksmchsiz)
|
||||
FROM
|
||||
x$ksmsp
|
||||
GROUP BY
|
||||
ksmchdur
|
||||
, ksmchcls
|
||||
, SUBSTR(ksmchcom,1,DECODE(INSTR(ksmchcom,'^'),0,99,INSTR(ksmchcom,'^')))
|
||||
ORDER BY
|
||||
ksmchdur
|
||||
, SUM(ksmchsiz) DESC
|
||||
/
|
||||
|
||||
99
tpt/aot/shared_pool_leak_bug.sql
Normal file
99
tpt/aot/shared_pool_leak_bug.sql
Normal file
@@ -0,0 +1,99 @@
|
||||
-- MOS: Bug 13250244 : ORA-4031 ERRORS SEEN WHEN PARAMETER _KGHDSIDX_COUNT IS SET TO >1 DUE TO MEM LEAK
|
||||
|
||||
-- ~~~~~~~~~~~~~
|
||||
-- Testcase
|
||||
-- ~~~~~~~~~~~~~~~~~
|
||||
--
|
||||
-- Files: BDETC.tar.Z (containing init.ora, setup.sql, tc.sql)
|
||||
--
|
||||
-- Steps:
|
||||
-- ** IMPORTANT ** Merge init.ora into the pfile used to start the instance.
|
||||
--
|
||||
-- ie: Ensure the instance has _kghdsidx_count=4 set
|
||||
--
|
||||
--
|
||||
-- sqlplus /nolog @setup
|
||||
-- Creates a user TC with table FOO and a few stored outlines.
|
||||
-- eg:
|
||||
-- create table foo ( a number );
|
||||
-- insert into foo values(10);
|
||||
-- commit;
|
||||
-- create index ifoo on foo(a);
|
||||
-- analyze table foo compute statistics;
|
||||
-- create sequence seq;
|
||||
-- alter session set create_stored_outlines=true;
|
||||
-- declare n number;
|
||||
-- begin
|
||||
-- for i in 1 .. 10 loop
|
||||
-- execute immediate 'select count(*) from foo where a='||i INTO n;
|
||||
-- end loop;
|
||||
-- end;
|
||||
-- /
|
||||
--
|
||||
-- sqlplus /nolog @tc
|
||||
-- Sets USE_STORED_OUTLINES=TRUE and runs a load of literal selects.
|
||||
-- eg:
|
||||
-- alter session set use_stored_outlines=true;
|
||||
-- declare n number;
|
||||
-- begin
|
||||
-- for i in 1 .. 40000
|
||||
-- loop
|
||||
-- select seq.nextval into n from dual;
|
||||
-- execute immediate 'select count(*) from foo where a='||n INTO n;
|
||||
-- end loop;
|
||||
-- end;
|
||||
-- /
|
||||
--
|
||||
-- Then flushes the shared pool and shows the number of 'STORED OUTLINE'
|
||||
-- objects in V$DB_OBJECT_CACHE (ie: In the library cache).
|
||||
-- eg:
|
||||
-- select count(*) from v$db_object_cache
|
||||
-- where namespace='STORED OUTLINE';
|
||||
--
|
||||
-- ^
|
||||
-- After one run of tc.sql you will see there are many thousand
|
||||
-- STORED OUTLINE objects in the library cache even after a flush
|
||||
-- of the shared pool. These objects are not in use by anyone
|
||||
-- but are not on the shared pool LRU so just accumulate "KGLHD"
|
||||
-- space.
|
||||
--
|
||||
-- If you run tc.sql several times then eventually you will get
|
||||
-- ORA-4031 errors as all free space is taken by the STORED OUTLINE
|
||||
-- KGLHD handles.
|
||||
--
|
||||
--
|
||||
-- Reproduced
|
||||
-- ~~~~~~~~~~
|
||||
-- Reproduced in 11.2.0.2
|
||||
-- Reproduced in 11.2.0.3
|
||||
-- Reproduced in RDBMS_MAIN_LINUX.X64_111025
|
||||
--
|
||||
--
|
||||
-- Workaround/s
|
||||
-- ~~~~~~~~~~~~
|
||||
-- Use plan baselines and related 11g options to control the execution
|
||||
-- plans instead of using stored outlines.
|
||||
-- OR
|
||||
-- The problem does not seem to occur if there is only one SGA subpool.
|
||||
-- ie: Instance runs with "_kghdsidx_count"=1
|
||||
-- (but setting this to 1 may affect shared pool concurrency on some systems)
|
||||
--
|
||||
-- The problem is aggravated by having USE_STORED_OUTLINES set for sessions
|
||||
-- running literal SQL as each literal statement gets a STORED OUTLINE
|
||||
-- handle , even if there is no matching outline (this is expected).
|
||||
-- Hence avoiding literal SQL in sessions with USE_STORED_OUTLINES
|
||||
-- can help reduce/eliminate any impact from this problem
|
||||
-- eg: If the DB has CURSOR_SHARING=FORCE then the example test above
|
||||
-- leaks no KGLHD STORED OUTLINE handles
|
||||
--
|
||||
--
|
||||
-- Diagnostic Notes
|
||||
-- ~~~~~~~~~~~~~~~~
|
||||
-- If a session has USE_STORED_OUTLINES set then any SQL issued by the
|
||||
-- session gets an outline handle, even if there is no actual outline.
|
||||
-- This is normal and expected.
|
||||
--
|
||||
-- However,
|
||||
-- It seems that if there is more than one shared pool subpool then
|
||||
-- we somehow manage to get some stored outline handles left off of
|
||||
-- the LRU list leading to a leak of KGLHD STORED OUTLINE handles over
|
||||
1718
tpt/aot/short_stack.sql
Normal file
1718
tpt/aot/short_stack.sql
Normal file
File diff suppressed because it is too large
Load Diff
39
tpt/aot/soe_indexes.sql
Normal file
39
tpt/aot/soe_indexes.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- undo optimizations to bad scalability
|
||||
|
||||
-- ALTER SEQUENCE SOE.ORDERS_SEQ NOORDER CACHE 2; -- enq: SV
|
||||
ALTER SEQUENCE SOE.ORDERS_SEQ NOORDER CACHE 2; -- enq: SQ
|
||||
|
||||
--@disable_restricting_fks SOE.ORDERS
|
||||
ALTER TABLE SOE.ORDER_ITEMS DISABLE CONSTRAINT ORDER_ITEMS_ORDER_ID_FK;
|
||||
ALTER TABLE soe.orders DISABLE CONSTRAINT order_pk;
|
||||
|
||||
DROP INDEX soe.order_pk;
|
||||
DROP INDEX soe.ord_order_date_ix;
|
||||
|
||||
CREATE UNIQUE INDEX SOE.ORDER_PK ON SOE.ORDERS (ORDER_ID)
|
||||
NOLOGGING TABLESPACE SOE PARALLEL 4;
|
||||
|
||||
CREATE INDEX SOE.ORD_ORDER_DATE_IX ON SOE.ORDERS (ORDER_DATE)
|
||||
NOLOGGING TABLESPACE SOE PARALLEL 4;
|
||||
|
||||
CREATE BITMAP INDEX SOE.ORDER_MAGIC ON SOE.ORDERS(ORDER_ID,ORDER_DATE)
|
||||
NOLOGGING TABLESPACE SOE PARALLEL 4;
|
||||
|
||||
ALTER INDEX SOE.ORDER_PK NOPARALLEL;
|
||||
ALTER INDEX SOE.ORD_ORDER_DATE_IX NOPARALLEL;
|
||||
ALTER INDEX SOE.ORDER_MAGIC NOPARALLEL;
|
||||
|
||||
ALTER TABLE soe.orders ENABLE VALIDATE CONSTRAINT order_pk;
|
||||
|
||||
|
||||
|
||||
ALTER SESSION SET ddl_lock_timeout = 10;
|
||||
|
||||
ALTER TABLE soe.orders ENABLE VALIDATE CONSTRAINT order_pk;
|
||||
ALTER TABLE soe.orders ENABLE VALIDATE CONSTRAINT orders_customer_id_fk;
|
||||
|
||||
|
||||
-- reverse key
|
||||
-- recreate above indexes with REVERSE flag
|
||||
|
||||
|
||||
39
tpt/aot/sqlidconv.sql
Normal file
39
tpt/aot/sqlidconv.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
@saveset
|
||||
set serverout on
|
||||
|
||||
def convstr=0123456789abcdfghjkmnpqrstuvwxyz
|
||||
def base=32
|
||||
|
||||
declare
|
||||
r number := 0;
|
||||
j number := 0;
|
||||
a number := 0;
|
||||
begin
|
||||
|
||||
for i in 1..length('&1') loop
|
||||
|
||||
j := length('&1') - i + 1;
|
||||
-- dbms_output.put_line('i='||i||' j='||j||' chr='||substr('&1',i,1));
|
||||
|
||||
a := (( power(&base, j-1) * (instr('&convstr',substr('&1',i,1))-1) ));
|
||||
-- dbms_output.put_line(' a='||a);
|
||||
|
||||
r := r + a;
|
||||
|
||||
-- dbms_output.put_line(' r='||to_char(r,'XXXXXXXXXXXXXXXX'));
|
||||
-- dbms_output.put_line('power='||to_char(power(&base, i-1)));
|
||||
-- dbms_output.put_line(' mult='||to_char(instr('&convstr',substr('&1',i,1))-1) );
|
||||
-- dbms_output.put_line('--');
|
||||
dbms_output.put_line('j='||j||' i='||i||' c='||substr('&1',i,1)||' mult='||to_char(instr('&convstr',substr('&1',i,1))-1)||' power='||to_char(power(&base, i-1))||' a='||a );
|
||||
end loop;
|
||||
dbms_output.put_line('result= '||r||' 0x'||trim(to_char(r, 'xxxxxxxxxxxxxxxxxxxxxxxx')));
|
||||
dbms_output.put_line('last 4B= '||trunc(mod(r,power(2,32)))||' 0x'||trim(to_char(trunc(mod(r,power(2,32))), 'xxxxxxxxxxxxxxxxxxxxxxxx')));
|
||||
|
||||
dbms_output.put_line(chr(10)||'sqlid=&1 hash_value='|| trunc(mod(r,power(2,32))) );
|
||||
end;
|
||||
/
|
||||
|
||||
@loadset
|
||||
25
tpt/aot/system_ts_writes.sql
Normal file
25
tpt/aot/system_ts_writes.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
DROP TABLE t1 PURGE;
|
||||
DROP TABLE t2 PURGE;
|
||||
|
||||
SET ECHO ON
|
||||
|
||||
CREATE TABLE t1(a INT) TABLESPACE users;
|
||||
CREATE TABLE t2(a INT) TABLESPACE system;
|
||||
|
||||
ALTER SYSTEM SWITCH LOGFILE;
|
||||
ALTER SYSTEM CHECKPOINT;
|
||||
|
||||
PAUSE
|
||||
|
||||
SET TIMING ON
|
||||
|
||||
EXEC FOR i IN 1..300000 LOOP INSERT INTO t1 VALUES(i); END LOOP;
|
||||
|
||||
ALTER SYSTEM CHECKPOINT;
|
||||
|
||||
EXEC FOR i IN 1..300000 LOOP INSERT INTO t2 VALUES(i); END LOOP;
|
||||
|
||||
SET TIMING OFF ECHO OFF
|
||||
20
tpt/aot/temp_io.sql
Normal file
20
tpt/aot/temp_io.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
ALTER SESSION SET workarea_size_policy=MANUAL;
|
||||
ALTER SESSION SET sort_area_size=40960;
|
||||
ALTER SESSION SET sort_area_retained_size=40960;
|
||||
|
||||
VAR c REFCURSOR
|
||||
|
||||
DECLARE
|
||||
t VARCHAR2(4000);
|
||||
BEGIN
|
||||
LOOP
|
||||
OPEN :c FOR SELECT TO_CHAR(rownum)||LPAD('x',3900,'x') text FROM dual CONNECT BY LEVEL <=1000 ORDER BY text;
|
||||
FETCH :c INTO t;
|
||||
CLOSE :c;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
189
tpt/aot/tx_lock_diag.txt
Normal file
189
tpt/aot/tx_lock_diag.txt
Normal file
@@ -0,0 +1,189 @@
|
||||
SQL> @s 152
|
||||
|
||||
SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL
|
||||
------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------
|
||||
152 WAITING enq: TX - row lock contention 21 3 1415053318 393221 6000 0x54580006: TX mode 6
|
||||
|
||||
SQL> select obj, tch, file#, dbablk
|
||||
2 from x$bh
|
||||
3 where bitand(flag,8)=8;
|
||||
|
||||
no rows selected
|
||||
|
||||
SQL>
|
||||
SQL>
|
||||
SQL>
|
||||
SQL>
|
||||
SQL>
|
||||
SQL> desc v$transaction
|
||||
Name Null? Type
|
||||
------------------------------------------------------------------------------------------------------ -------- ----------------------------------------------------------------------------
|
||||
1 ADDR RAW(8)
|
||||
2 XIDUSN NUMBER
|
||||
3 XIDSLOT NUMBER
|
||||
4 XIDSQN NUMBER
|
||||
5 UBAFIL NUMBER
|
||||
6 UBABLK NUMBER
|
||||
7 UBASQN NUMBER
|
||||
8 UBAREC NUMBER
|
||||
9 STATUS VARCHAR2(16)
|
||||
10 START_TIME VARCHAR2(20)
|
||||
11 START_SCNB NUMBER
|
||||
12 START_SCNW NUMBER
|
||||
13 START_UEXT NUMBER
|
||||
14 START_UBAFIL NUMBER
|
||||
15 START_UBABLK NUMBER
|
||||
16 START_UBASQN NUMBER
|
||||
17 START_UBAREC NUMBER
|
||||
18 SES_ADDR RAW(8)
|
||||
19 FLAG NUMBER
|
||||
20 SPACE VARCHAR2(3)
|
||||
21 RECURSIVE VARCHAR2(3)
|
||||
22 NOUNDO VARCHAR2(3)
|
||||
23 PTX VARCHAR2(3)
|
||||
24 NAME VARCHAR2(256)
|
||||
25 PRV_XIDUSN NUMBER
|
||||
26 PRV_XIDSLT NUMBER
|
||||
27 PRV_XIDSQN NUMBER
|
||||
28 PTX_XIDUSN NUMBER
|
||||
29 PTX_XIDSLT NUMBER
|
||||
30 PTX_XIDSQN NUMBER
|
||||
31 DSCN-B NUMBER
|
||||
32 DSCN-W NUMBER
|
||||
33 USED_UBLK NUMBER
|
||||
34 USED_UREC NUMBER
|
||||
35 LOG_IO NUMBER
|
||||
36 PHY_IO NUMBER
|
||||
37 CR_GET NUMBER
|
||||
38 CR_CHANGE NUMBER
|
||||
39 START_DATE DATE
|
||||
40 DSCN_BASE NUMBER
|
||||
41 DSCN_WRAP NUMBER
|
||||
42 START_SCN NUMBER
|
||||
43 DEPENDENT_SCN NUMBER
|
||||
44 XID RAW(8)
|
||||
45 PRV_XID RAW(8)
|
||||
46 PTX_XID RAW(8)
|
||||
|
||||
SQL> @dec 1415053318
|
||||
|
||||
DEC HEX
|
||||
----------------------------------- --------------------
|
||||
1415053318.000000 54580006
|
||||
|
||||
SQL> @lt TX
|
||||
|
||||
TYPE LOCK NAME ID1 MEANING ID2 MEANING LT_ DESCRIPTION
|
||||
---- ------------------------------ ------------------------- ------------------------- --- ------------------------------------------------------------
|
||||
TX Transaction usn<<16 | slot sequence YES Lock held by a transaction to allow other transactions to
|
||||
wait for it
|
||||
|
||||
|
||||
SQL> @s 152
|
||||
|
||||
SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL
|
||||
------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------
|
||||
152 WAITING enq: TX - row lock contention 21 78 1415053318 393221 6000 0x54580006: TX mode 6
|
||||
|
||||
SQL>
|
||||
SQL>
|
||||
SQL> @s 152
|
||||
|
||||
SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL
|
||||
------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------
|
||||
152 WAITING enq: TX - row lock contention 21 81 1415053318 393221 6000 0x54580006: TX mode 6
|
||||
|
||||
SQL>
|
||||
SQL> select * from v$lock where sid = 152;
|
||||
|
||||
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
|
||||
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
|
||||
00000003DA32CE88 00000003DA32CEA8 152 TX 393221 6000 0 6 99 0
|
||||
00000003DA99E260 00000003DA99E288 152 TM 58197 0 3 0 99 0
|
||||
|
||||
SQL> select * from v$lock where sid = 152 and request != 0;
|
||||
|
||||
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
|
||||
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
|
||||
00000003DA32CE88 00000003DA32CEA8 152 TX 393221 6000 0 6 108 0
|
||||
|
||||
SQL> select mod(393221,power(2,16)) from dual;
|
||||
|
||||
MOD(393221,POWER(2,16))
|
||||
-----------------------
|
||||
5
|
||||
|
||||
SQL> select 393221/power(2,16) usn, mod(393221,power(2,16)) slot from dual;
|
||||
|
||||
USN SLOT
|
||||
---------- ----------
|
||||
6.00007629 5
|
||||
|
||||
SQL> select trunc(393221/power(2,16)) usn, mod(393221,power(2,16)) slot from dual;
|
||||
|
||||
USN SLOT
|
||||
---------- ----------
|
||||
6 5
|
||||
|
||||
SQL>
|
||||
SQL>
|
||||
SQL>
|
||||
SQL> select ses_addr from v$transaction where XIDUSN = 6 and XIDSLOT = 5;
|
||||
|
||||
SES_ADDR
|
||||
----------------
|
||||
00000003DD24CBA0
|
||||
|
||||
SQL> select sid, sql_hash_value from v$session where saddr = '00000003DD24CBA0';
|
||||
|
||||
SID SQL_HASH_VALUE
|
||||
---------- --------------
|
||||
144 3935459581
|
||||
|
||||
SQL> @sql 3935459581
|
||||
|
||||
CH# SQL_TEXT
|
||||
---- ------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
0 BEGIN dbms_lock.sleep(600); END;
|
||||
|
||||
|
||||
CH# PARENT_HANDLE OBJECT_HANDLE PARSES H_PARSES EXECUTIONS FETCHES ROWS_PROCESSED LIOS PIOS SORTS CPU_MS ELA_MS USERS_EXECUTING
|
||||
---- ---------------- ---------------- ---------- ---------- ---------- ---------- -------------- ---------- ---------- ---------- ---------- ---------- ---------------
|
||||
0 00000003DC63AD80 00000003DC4EF988 1 1 0 0 0 0 0 0 3.729 3.729 1
|
||||
|
||||
SQL>
|
||||
SQL>
|
||||
SQL> desc v$open_cursor
|
||||
Name Null? Type
|
||||
------------------------------------------------------------------------------------------------------ -------- ----------------------------------------------------------------------------
|
||||
1 SADDR RAW(8)
|
||||
2 SID NUMBER
|
||||
3 USER_NAME VARCHAR2(30)
|
||||
4 ADDRESS RAW(8)
|
||||
5 HASH_VALUE NUMBER
|
||||
6 SQL_ID VARCHAR2(13)
|
||||
7 SQL_TEXT VARCHAR2(60)
|
||||
|
||||
SQL> select hash_value, sql_text from v$open_cursor where sid = 144;
|
||||
|
||||
HASH_VALUE SQL_TEXT
|
||||
---------- ------------------------------------------------------------
|
||||
1420612433 update smon_scn_time set orig_thread=0, time_mp=:1, time_dp=
|
||||
3114265815 select local_tran_id, global_tran_fmt, global_oracle_id, glo
|
||||
3935459581 BEGIN dbms_lock.sleep(600); END;
|
||||
541202592 select obj, tch, file#, dbablk from x$bh where bitand(flag,8
|
||||
599212612 select s.username i_username, i.instance_name i_instance
|
||||
2953317698 update mytest set dummy = 'Y'
|
||||
2509924099 select value ||'/'||(select instance_name from v$instance)
|
||||
|
||||
7 rows selected.
|
||||
|
||||
SQL>
|
||||
|
||||
|
||||
|
||||
-- these were the troublemakers
|
||||
3935459581 BEGIN dbms_lock.sleep(600); END;
|
||||
2953317698 update mytest set dummy = 'Y'
|
||||
|
||||
|
||||
28
tpt/aot/wrong_results.sql
Normal file
28
tpt/aot/wrong_results.sql
Normal file
@@ -0,0 +1,28 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- BUG 10259620
|
||||
-- https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=10259620.8
|
||||
|
||||
drop table t;
|
||||
create table t(c1 number, c2 number, c3 as (c1 + 2));
|
||||
|
||||
insert into t(c1, c2) values (1, 2);
|
||||
insert into t(c1, c2) values (2, 3);
|
||||
commit;
|
||||
|
||||
create index btix_1 on t (c2 desc);
|
||||
create index btix_2 on t (c3, c2);
|
||||
|
||||
@sl all
|
||||
|
||||
select c2, c3
|
||||
from t where c2 = 3 or (c3 = 3)
|
||||
order by c2, c3;
|
||||
@x
|
||||
|
||||
select /*+ use_concat index(t) */ c2, c3
|
||||
from t where c2 = 3 or (c3 = 3)
|
||||
order by c2, c3;
|
||||
@x
|
||||
|
||||
4
tpt/appinfo.sql
Normal file
4
tpt/appinfo.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SELECT module, action, client_identifier, ecid FROM v$session WHERE sid IN (&1);
|
||||
10
tpt/aq.sql
Normal file
10
tpt/aq.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
select * from gv$qmon_tasks order by inst_id, task_type, task_name, task_number;
|
||||
|
||||
select inst_id, queue_schema, queue_name, queue_id, queue_state, startup_time,
|
||||
num_msgs, spill_msgs, waiting, ready, expired, cnum_msgs, cspill_msgs, expired_msgs,
|
||||
total_wait, average_wait
|
||||
from gv$buffered_queues, gv$aq
|
||||
where queue_id=qid
|
||||
order by 1,2,3;
|
||||
|
||||
|
||||
7
tpt/ar.sql
Normal file
7
tpt/ar.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
and rownum <= &1
|
||||
.
|
||||
prompt ....and rownum <= &1
|
||||
/
|
||||
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
26
tpt/arg.sql
Normal file
26
tpt/arg.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- object arguments
|
||||
|
||||
col proc_owner head OWNER for a25
|
||||
col proc_object_name head OBJECT_NAME for a30
|
||||
col proc_procedure_name head PROCEDURE_NAME for a30
|
||||
|
||||
select
|
||||
a.owner proc_owner
|
||||
, a.object_name proc_object_name
|
||||
, p.procedure_name proc_procedure_name
|
||||
, a.subprogram_id
|
||||
from
|
||||
dba_arguments a
|
||||
, dba_procedures p
|
||||
where
|
||||
a.owner = p.owner
|
||||
and a.object_name = p.object_name
|
||||
and a.object_id = p.object_id
|
||||
and a.subprogram_id = p.subprogram_id
|
||||
and lower(p.owner) like lower('%&1%')
|
||||
and lower(p.object_name) like lower('%&2%')
|
||||
and lower(p.procedure_name) like lower('%&3%')
|
||||
/
|
||||
21
tpt/as.sql
Normal file
21
tpt/as.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
prompt A-Script: Display active sessions grouped by &1....
|
||||
|
||||
select
|
||||
&1
|
||||
, count(*)
|
||||
from
|
||||
v$session
|
||||
where
|
||||
status='ACTIVE'
|
||||
and type !='BACKGROUND'
|
||||
and wait_class != 'Idle'
|
||||
and sid != (select sid from v$mystat where rownum=1)
|
||||
group by
|
||||
&1
|
||||
order by
|
||||
count(*) desc
|
||||
/
|
||||
|
||||
15
tpt/ascii.sql
Normal file
15
tpt/ascii.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
select
|
||||
r*4+0, chr(r*4+0),
|
||||
r*4+1, chr(r*4+1),
|
||||
r*4+2, chr(r*4+2),
|
||||
r*4+3, chr(r*4+3)
|
||||
from (
|
||||
select
|
||||
rownum-1 r
|
||||
from
|
||||
dual connect by level <=64
|
||||
)
|
||||
/
|
||||
2
tpt/asfp.sql
Normal file
2
tpt/asfp.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
PROMPT ALTER SESSION FORCE PARALLEL QUERY PARALLEL &1;;
|
||||
ALTER SESSION FORCE PARALLEL QUERY PARALLEL &1;
|
||||
38
tpt/ash.sql
Normal file
38
tpt/ash.sql
Normal file
@@ -0,0 +1,38 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF
|
||||
|
||||
DEF from_time="TIMESTAMP'2012-05-21 07:55:00'"
|
||||
DEF to_time="TIMESTAMP'2012-05-21 08:15:00'"
|
||||
--DEF from_time=sysdate-1/24/60*5
|
||||
--DEF to_time=sysdate
|
||||
|
||||
--DEF cols=session_state,event,sql_id
|
||||
DEF cols=&1
|
||||
|
||||
PROMPT FROM_TIME=&from_time TO_TIME=&to_time
|
||||
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
&cols
|
||||
, count(*)
|
||||
, lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent
|
||||
FROM
|
||||
-- active_session_history_bak
|
||||
v$active_session_history
|
||||
-- dba_hist_active_sess_history
|
||||
WHERE
|
||||
sample_time BETWEEN &from_time AND &to_time
|
||||
AND &where_clause
|
||||
GROUP BY
|
||||
&cols
|
||||
ORDER BY
|
||||
percent DESC
|
||||
)
|
||||
WHERE ROWNUM <= 20
|
||||
/
|
||||
|
||||
-- DEF cols=session_state,event,p1,p2
|
||||
-- DEF cols=session_state,event,sql_id
|
||||
|
||||
176
tpt/ash/ash_index_helper.sql
Normal file
176
tpt/ash/ash_index_helper.sql
Normal file
@@ -0,0 +1,176 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON
|
||||
|
||||
COL accessed_table HEAD Accessed_Table FOR a40
|
||||
COL aindex_operation HEAD Plan_Operation FOR a70
|
||||
COL aindex_predicates HEAD PREDICATES FOR a100 truncate
|
||||
COL obj_alias_qbc_name FOR a40
|
||||
COL options FOR a30
|
||||
|
||||
COL AAS FOR 9999.9
|
||||
COL cpu_pct HEAD CPU FOR A5
|
||||
COL wait_pct HEAD WAIT FOR A5
|
||||
|
||||
COL ela_sec_exec HEAD "ELA_SEC/EXEC" FOR 9999990.999
|
||||
|
||||
COL aindex_plan_hash_value HEAD PLAN_HASH_VALUE PRINT
|
||||
COL aindex_sql_id HEAD SQL_ID NOPRINT
|
||||
COL aindex_sql_child HEAD "CHILD" PRINT
|
||||
COL aindex_sample_time HEAD SAMPLE_HOUR
|
||||
COL projection FOR A520
|
||||
|
||||
COL pct_child HEAD "Activity %" FOR A8
|
||||
COL pct_child_vis HEAD "Visual" FOR A12
|
||||
|
||||
COL aindex_id HEAD "ID" FOR 9999
|
||||
COL aindex_parent_id HEAD "PID" FOR 9999
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT -- Santa's Little (Index) Helper BETA v0.5 - by Tanel Poder ( https://tanelpoder.com )
|
||||
|
||||
WITH
|
||||
tab AS (SELECT /*+ NO_MERGE */ owner, table_name, num_rows
|
||||
FROM dba_tables
|
||||
WHERE UPPER(table_name) LIKE
|
||||
UPPER(CASE
|
||||
WHEN INSTR('&2','.') > 0 THEN
|
||||
SUBSTR('&2',INSTR('&2','.')+1)
|
||||
ELSE
|
||||
'&2'
|
||||
END
|
||||
) ESCAPE '\'
|
||||
AND owner LIKE
|
||||
CASE WHEN INSTR('&2','.') > 0 THEN
|
||||
UPPER(SUBSTR('&2',1,INSTR('&2','.')-1))
|
||||
ELSE
|
||||
user
|
||||
END ESCAPE '\'
|
||||
),
|
||||
ind AS (SELECT /*+ NO_MERGE */ owner, index_name, table_owner, table_name
|
||||
FROM dba_indexes
|
||||
WHERE (table_owner, table_name) IN (SELECT owner, table_name FROM tab)),
|
||||
sample_times AS (
|
||||
select * from dual
|
||||
),
|
||||
sq AS (
|
||||
SELECT
|
||||
count(*) samples
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.wait_class
|
||||
, ash.event
|
||||
FROM
|
||||
v$active_session_history ash
|
||||
WHERE
|
||||
1=1
|
||||
AND ash.sql_plan_operation IN ('TABLE ACCESS', 'INDEX')
|
||||
AND ash.sql_id LIKE '&1'
|
||||
AND ash.sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1)
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.wait_class
|
||||
, ash.event
|
||||
),
|
||||
ash_and_plan AS (
|
||||
SELECT
|
||||
plan.sql_id
|
||||
, plan.child_number
|
||||
, plan.plan_hash_value
|
||||
, sq.samples seconds
|
||||
, LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis
|
||||
--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) aindex_plan_id
|
||||
, plan.id aindex_id
|
||||
, plan.parent_id aindex_parent_id
|
||||
, plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_owner||'.'||plan.object_name ||']', null) aindex_operation
|
||||
, plan.object_owner
|
||||
, plan.object_name
|
||||
, plan.object_type
|
||||
, plan.cardinality
|
||||
, stat.executions
|
||||
, stat.elapsed_time
|
||||
, sq.session_state
|
||||
, sq.wait_class
|
||||
, sq.event
|
||||
, plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name
|
||||
, CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1994) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1994) END aindex_predicates
|
||||
-- , plan.projection
|
||||
FROM
|
||||
v$sql_plan plan
|
||||
, v$sqlstats_plan_hash stat
|
||||
, sq
|
||||
WHERE
|
||||
1=1
|
||||
AND sq.sql_id(+) = plan.sql_id
|
||||
AND sq.sql_child_number(+) = plan.child_number
|
||||
AND sq.sql_plan_line_id(+) = plan.id
|
||||
AND sq.sql_plan_hash_value(+) = plan.plan_hash_value
|
||||
--
|
||||
AND sq.sql_id(+) = stat.sql_id
|
||||
AND sq.sql_plan_hash_value(+) = stat.plan_hash_value
|
||||
AND stat.sql_id = plan.sql_id
|
||||
AND stat.plan_hash_value = plan.plan_hash_value
|
||||
--
|
||||
AND plan.sql_id LIKE '&1'
|
||||
----
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
SUM(ap.seconds) seconds
|
||||
, ROUND(SUM(ap.seconds) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, LPAD(TO_CHAR(ROUND(SUM(CASE WHEN ap.session_state = 'ON CPU' THEN ap.seconds ELSE 0 END) / SUM(ap.seconds) * 100))||'%',4) cpu_pct
|
||||
, LPAD(TO_CHAR(ROUND(SUM(CASE WHEN ap.session_state = 'WAITING' THEN ap.seconds ELSE 0 END) / SUM(ap.seconds) * 100))||'%',4) wait_pct
|
||||
--, SUM(CASE WHEN ap.wait_class = 'User I/O' THEN ap.seconds ELSE 0 END) iowait_sec
|
||||
, t.owner||'.'||table_name accessed_table
|
||||
, ap.aindex_operation
|
||||
, ap.cardinality plan_card
|
||||
, t.num_rows table_rows
|
||||
, ap.cardinality / NULLIF(t.num_rows,0) * 100 filter_pct
|
||||
, ap.executions sql_execs
|
||||
, ROUND(ap.elapsed_time / NULLIF(ap.executions,0) / 1000000,3) ela_sec_exec
|
||||
, ap.aindex_predicates
|
||||
, COUNT(DISTINCT ap.sql_id) dist_sqlids
|
||||
, COUNT(DISTINCT ap.plan_hash_value) dist_plans
|
||||
, MIN(ap.sql_id)
|
||||
, MAX(ap.sql_id)
|
||||
-- , ap.projection
|
||||
FROM
|
||||
ash_and_plan ap
|
||||
, (SELECT tab.*, 'TABLE' object_type, tab.owner object_owner, tab.table_name object_name FROM tab
|
||||
UNION ALL
|
||||
SELECT tab.*, 'INDEX', ind.owner object_owner, ind.index_name object_name
|
||||
FROM tab, ind
|
||||
WHERE tab.owner = ind.table_owner AND tab.table_name = ind.table_name
|
||||
) t
|
||||
WHERE
|
||||
ap.object_owner = t.object_owner AND ap.object_name = t.object_name AND SUBSTR(ap.object_type,1,5) = t.object_type
|
||||
AND ap.seconds > 0
|
||||
GROUP BY
|
||||
t.owner
|
||||
, t.table_name
|
||||
, ap.aindex_operation
|
||||
, t.num_rows
|
||||
, ap.cardinality
|
||||
, ap.executions
|
||||
, ap.elapsed_time
|
||||
, ap.aindex_predicates
|
||||
-- , ap.projection
|
||||
ORDER BY
|
||||
seconds DESC
|
||||
)
|
||||
WHERE rownum <= 30
|
||||
/
|
||||
176
tpt/ash/ash_index_helperx.sql
Normal file
176
tpt/ash/ash_index_helperx.sql
Normal file
@@ -0,0 +1,176 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON
|
||||
|
||||
COL accessed_table HEAD Accessed_Table FOR a40
|
||||
COL aindex_operation HEAD Plan_Operation FOR a70
|
||||
COL aindex_predicates HEAD PREDICATES FOR a100 truncate
|
||||
COL obj_alias_qbc_name FOR a40
|
||||
COL options FOR a30
|
||||
|
||||
COL AAS FOR 9999.9
|
||||
COL cpu_pct HEAD CPU FOR A5
|
||||
COL wait_pct HEAD WAIT FOR A5
|
||||
|
||||
COL ela_sec_exec HEAD "ELA_SEC/EXEC" FOR 9999990.999
|
||||
|
||||
COL aindex_plan_hash_value HEAD PLAN_HASH_VALUE PRINT
|
||||
COL aindex_sql_id HEAD SQL_ID NOPRINT
|
||||
COL aindex_sql_child HEAD "CHILD" PRINT
|
||||
COL aindex_sample_time HEAD SAMPLE_HOUR
|
||||
COL projection FOR A520
|
||||
|
||||
COL pct_child HEAD "Activity %" FOR A8
|
||||
COL pct_child_vis HEAD "Visual" FOR A12
|
||||
|
||||
COL aindex_id HEAD "ID" FOR 9999
|
||||
COL aindex_parent_id HEAD "PID" FOR 9999
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT -- Santa's Little (Index) Helper BETA v0.5 - by Tanel Poder ( https://tanelpoder.com )
|
||||
|
||||
WITH
|
||||
tab AS (SELECT /*+ NO_MERGE */ owner, table_name, num_rows
|
||||
FROM dba_tables
|
||||
WHERE UPPER(table_name) LIKE
|
||||
UPPER(CASE
|
||||
WHEN INSTR('&2','.') > 0 THEN
|
||||
SUBSTR('&2',INSTR('&2','.')+1)
|
||||
ELSE
|
||||
'&2'
|
||||
END
|
||||
) ESCAPE '\'
|
||||
AND owner LIKE
|
||||
CASE WHEN INSTR('&2','.') > 0 THEN
|
||||
UPPER(SUBSTR('&2',1,INSTR('&2','.')-1))
|
||||
ELSE
|
||||
user
|
||||
END ESCAPE '\'
|
||||
),
|
||||
ind AS (SELECT /*+ NO_MERGE */ owner, index_name, table_owner, table_name
|
||||
FROM dba_indexes
|
||||
WHERE (table_owner, table_name) IN (SELECT owner, table_name FROM tab)),
|
||||
sample_times AS (
|
||||
select * from dual
|
||||
),
|
||||
sq AS (
|
||||
SELECT
|
||||
count(*) samples
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.wait_class
|
||||
, ash.event
|
||||
FROM
|
||||
v$active_session_history ash
|
||||
WHERE
|
||||
1=1
|
||||
AND ash.sql_plan_operation IN ('TABLE ACCESS', 'INDEX')
|
||||
AND ash.sql_id LIKE '&1'
|
||||
AND ash.sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1)
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.wait_class
|
||||
, ash.event
|
||||
),
|
||||
ash_and_plan AS (
|
||||
SELECT
|
||||
plan.sql_id
|
||||
, plan.child_number
|
||||
, plan.plan_hash_value
|
||||
, sq.samples seconds
|
||||
, LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis
|
||||
--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) aindex_plan_id
|
||||
, plan.id aindex_id
|
||||
, plan.parent_id aindex_parent_id
|
||||
, plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_owner||'.'||plan.object_name ||']', null) aindex_operation
|
||||
, plan.object_owner
|
||||
, plan.object_name
|
||||
, plan.object_type
|
||||
, plan.cardinality
|
||||
, stat.executions
|
||||
, stat.elapsed_time
|
||||
, sq.session_state
|
||||
, sq.wait_class
|
||||
, sq.event
|
||||
, plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name
|
||||
, CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1994) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1994) END aindex_predicates
|
||||
, plan.projection
|
||||
FROM
|
||||
v$sql_plan plan
|
||||
, v$sqlstats_plan_hash stat
|
||||
, sq
|
||||
WHERE
|
||||
1=1
|
||||
AND sq.sql_id(+) = plan.sql_id
|
||||
AND sq.sql_child_number(+) = plan.child_number
|
||||
AND sq.sql_plan_line_id(+) = plan.id
|
||||
AND sq.sql_plan_hash_value(+) = plan.plan_hash_value
|
||||
--
|
||||
AND sq.sql_id(+) = stat.sql_id
|
||||
AND sq.sql_plan_hash_value(+) = stat.plan_hash_value
|
||||
AND stat.sql_id = plan.sql_id
|
||||
AND stat.plan_hash_value = plan.plan_hash_value
|
||||
--
|
||||
AND plan.sql_id LIKE '&1'
|
||||
----
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
SUM(ap.seconds) seconds
|
||||
, ROUND(SUM(ap.seconds) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, LPAD(TO_CHAR(ROUND(SUM(CASE WHEN ap.session_state = 'ON CPU' THEN ap.seconds ELSE 0 END) / SUM(ap.seconds) * 100))||'%',4) cpu_pct
|
||||
, LPAD(TO_CHAR(ROUND(SUM(CASE WHEN ap.session_state = 'WAITING' THEN ap.seconds ELSE 0 END) / SUM(ap.seconds) * 100))||'%',4) wait_pct
|
||||
--, SUM(CASE WHEN ap.wait_class = 'User I/O' THEN ap.seconds ELSE 0 END) iowait_sec
|
||||
, t.owner||'.'||table_name accessed_table
|
||||
, ap.aindex_operation
|
||||
, ap.cardinality plan_card
|
||||
, t.num_rows table_rows
|
||||
, ap.cardinality / NULLIF(t.num_rows,0) * 100 filter_pct
|
||||
, ap.executions sql_execs
|
||||
, ROUND(ap.elapsed_time / NULLIF(ap.executions,0) / 1000000,3) ela_sec_exec
|
||||
, ap.aindex_predicates
|
||||
, COUNT(DISTINCT ap.sql_id) dist_sqlids
|
||||
, COUNT(DISTINCT ap.plan_hash_value) dist_plans
|
||||
, MIN(ap.sql_id)
|
||||
, MAX(ap.sql_id)
|
||||
, ap.projection
|
||||
FROM
|
||||
ash_and_plan ap
|
||||
, (SELECT tab.*, 'TABLE' object_type, tab.owner object_owner, tab.table_name object_name FROM tab
|
||||
UNION ALL
|
||||
SELECT tab.*, 'INDEX', ind.owner object_owner, ind.index_name object_name
|
||||
FROM tab, ind
|
||||
WHERE tab.owner = ind.table_owner AND tab.table_name = ind.table_name
|
||||
) t
|
||||
WHERE
|
||||
ap.object_owner = t.object_owner AND ap.object_name = t.object_name AND SUBSTR(ap.object_type,1,5) = t.object_type
|
||||
AND ap.seconds > 0
|
||||
GROUP BY
|
||||
t.owner
|
||||
, t.table_name
|
||||
, ap.aindex_operation
|
||||
, t.num_rows
|
||||
, ap.cardinality
|
||||
, ap.executions
|
||||
, ap.elapsed_time
|
||||
, ap.aindex_predicates
|
||||
, ap.projection
|
||||
ORDER BY
|
||||
seconds DESC
|
||||
)
|
||||
WHERE rownum <= 30
|
||||
/
|
||||
18
tpt/ash/ash_log_file_sync.sql
Normal file
18
tpt/ash/ash_log_file_sync.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SELECT
|
||||
POWER(2, TRUNC(LOG(2,NULLIF(time_waited,0)))) up_to_microsec
|
||||
, COUNT(*)
|
||||
, SUM(time_waited)
|
||||
, MAX(time_waited)
|
||||
FROM
|
||||
v$active_session_history a
|
||||
WHERE
|
||||
a.event = 'log file sync'
|
||||
GROUP BY
|
||||
POWER(2, TRUNC(LOG(2,NULLIF(time_waited,0))))
|
||||
ORDER BY
|
||||
up_to_microsec
|
||||
/
|
||||
|
||||
118
tpt/ash/ash_object_predicates.sql
Normal file
118
tpt/ash/ash_object_predicates.sql
Normal file
@@ -0,0 +1,118 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON
|
||||
|
||||
COL asqlmon_operation HEAD Plan_Operation FOR a72
|
||||
COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap
|
||||
COL obj_alias_qbc_name FOR a40
|
||||
COL options FOR a30
|
||||
|
||||
COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE PRINT
|
||||
COL asqlmon_sql_id HEAD SQL_ID NOPRINT
|
||||
COL asqlmon_sql_child HEAD "CHILD" PRINT
|
||||
COL asqlmon_sample_time HEAD SAMPLE_HOUR
|
||||
COL projection FOR A520
|
||||
|
||||
COL pct_child HEAD "Activity %" FOR A8
|
||||
COL pct_child_vis HEAD "Visual" FOR A12
|
||||
|
||||
COL asqlmon_id HEAD "ID" FOR 9999
|
||||
COL asqlmon_parent_id HEAD "PID" FOR 9999
|
||||
|
||||
|
||||
BREAK ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ASQLMon v1.1 - by Tanel Poder ( http://blog.tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH
|
||||
|
||||
WITH sample_times AS (
|
||||
select * from dual
|
||||
),
|
||||
sq AS (
|
||||
SELECT
|
||||
count(*) samples
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events
|
||||
FROM
|
||||
v$active_session_history ash
|
||||
WHERE
|
||||
1=1
|
||||
AND ash.sql_plan_operation IN ('TABLE ACCESS', 'INDEX')
|
||||
AND ash.sql_id LIKE '&1'
|
||||
AND ash.sql_child_number LIKE '&2'
|
||||
AND ash.sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1)
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
),
|
||||
ash_and_plan AS (
|
||||
SELECT
|
||||
plan.sql_id
|
||||
, plan.child_number
|
||||
, plan.plan_hash_value
|
||||
, sq.samples seconds
|
||||
, LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis
|
||||
--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id
|
||||
, plan.id asqlmon_id
|
||||
, plan.parent_id asqlmon_parent_id
|
||||
, plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation
|
||||
, sq.session_state
|
||||
, sq.event
|
||||
-- , sq.avg_p3
|
||||
, plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name
|
||||
, CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1994) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1994) END asqlmon_predicates
|
||||
-- , plan.projection
|
||||
FROM
|
||||
v$sql_plan plan
|
||||
, sq
|
||||
WHERE
|
||||
1=1
|
||||
AND sq.sql_id(+) = plan.sql_id
|
||||
AND sq.sql_child_number(+) = plan.child_number
|
||||
AND sq.sql_plan_line_id(+) = plan.id
|
||||
AND sq.sql_plan_hash_value(+) = plan.plan_hash_value
|
||||
AND plan.sql_id LIKE '&1'
|
||||
AND plan.child_number LIKE '&2'
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
SUM(seconds) seconds
|
||||
, asqlmon_operation
|
||||
, session_state
|
||||
-- , event
|
||||
-- , obj_alias_qbc_name
|
||||
, asqlmon_predicates
|
||||
, COUNT(DISTINCT sql_id) dist_sqlids
|
||||
, COUNT(DISTINCT plan_hash_value) dist_plans
|
||||
, MIN(sql_id)
|
||||
, MAX(sql_id)
|
||||
FROM
|
||||
ash_and_plan
|
||||
WHERE
|
||||
seconds > 0
|
||||
GROUP BY
|
||||
asqlmon_operation
|
||||
, session_state
|
||||
-- , event
|
||||
-- , obj_alias_qbc_name
|
||||
, asqlmon_predicates
|
||||
ORDER BY
|
||||
seconds DESC
|
||||
)
|
||||
WHERE rownum <= 30
|
||||
/
|
||||
143
tpt/ash/ash_wait_chains.sql
Normal file
143
tpt/ash/ash_wait_chains.sql
Normal file
@@ -0,0 +1,143 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ash_wait_chains.sql (v0.8)
|
||||
-- Purpose: Display ASH wait chains (multi-session wait signature, a session
|
||||
-- waiting for another session etc.)
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) http://blog.tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @ash_wait_chains <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
-- @ash_wait_chains username||':'||program2||event2 session_type='FOREGROUND' sysdate-1/24 sysdate
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory G$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dash_wait_chains.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
-- Oracle 10g does not have the BLOCKING_INST_ID column in ASH so you'll need
|
||||
-- to comment out this column in this script. This may give you somewhat
|
||||
-- incorrect results in RAC environment with global blockers.
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL wait_chain FOR A300 WORD_WRAP
|
||||
COL "%This" FOR A6
|
||||
|
||||
PROMPT
|
||||
PROMPT -- Display ASH Wait Chain Signatures script v0.8 by Tanel Poder ( https://tanelpoder.com )
|
||||
|
||||
WITH
|
||||
bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat),
|
||||
ash AS (SELECT /*+ INLINE QB_NAME(ash) LEADING(a) USE_HASH(u) SWAP_JOIN_INPUTS(u) */
|
||||
a.*
|
||||
, CAST(a.sample_time AS DATE) sample_time_s -- round timestamp to 1 sec boundary for matching across RAC nodes
|
||||
, o.*
|
||||
, u.username
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' AND a.program LIKE '%(DBW%)' THEN
|
||||
'(DBWn)'
|
||||
WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, NVL(a.event||CASE WHEN event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||NVL((SELECT class FROM bclass WHERE r = a.p3),'undo @bclass '||a.p3)||']' ELSE null END,'ON CPU')
|
||||
|| ' ' event2
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
, CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name
|
||||
FROM
|
||||
gv$active_session_history a
|
||||
, dba_users u
|
||||
, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.current_obj# = o.object_id(+)
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
),
|
||||
ash_samples AS (SELECT /*+ INLINE */ DISTINCT sample_time_s FROM ash),
|
||||
ash_data AS (SELECT /*+ INLINE */ * FROM ash),
|
||||
chains AS (
|
||||
SELECT /*+ INLINE */
|
||||
d.sample_time_s ts
|
||||
, level lvl
|
||||
, session_id sid
|
||||
, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this
|
||||
--, SYS_CONNECT_BY_PATH(&1, ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN '('||d.session_id||')' ELSE NULL END path
|
||||
-- , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND LEVEL > 1 THEN ' [sid='||session_id||' seq#='||TO_CHAR(seq#)||']' ELSE NULL END path -- there's a reason why I'm doing this
|
||||
--, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') path -- there's a reason why I'm doing this (ORA-30004 :)
|
||||
, CASE WHEN CONNECT_BY_ISLEAF = 1 THEN d.session_id ELSE NULL END sids
|
||||
, CONNECT_BY_ISLEAF isleaf
|
||||
, CONNECT_BY_ISCYCLE iscycle
|
||||
, d.*
|
||||
FROM
|
||||
ash_samples s
|
||||
, ash_data d
|
||||
WHERE
|
||||
s.sample_time_s = d.sample_time_s
|
||||
AND d.sample_time BETWEEN &3 AND &4
|
||||
CONNECT BY NOCYCLE
|
||||
( PRIOR d.blocking_session = d.session_id
|
||||
AND PRIOR d.blocking_inst_id = d.inst_id
|
||||
AND PRIOR s.sample_time_s = d.sample_time_s -- Different RAC nodes have sample_id drift (assuming that clocks are synced enough)
|
||||
)
|
||||
START WITH &2
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This"
|
||||
, COUNT(*) seconds
|
||||
, ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, path wait_chain
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
, COUNT(DISTINCT sids) num_sids
|
||||
, MIN(sids)
|
||||
, MAX(sids)
|
||||
FROM
|
||||
chains
|
||||
WHERE
|
||||
isleaf = 1
|
||||
GROUP BY
|
||||
&1
|
||||
, path
|
||||
ORDER BY
|
||||
COUNT(*) DESC
|
||||
)
|
||||
WHERE
|
||||
ROWNUM <= 30
|
||||
/
|
||||
20
tpt/ash/ashmem.sql
Normal file
20
tpt/ash/ashmem.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI:SS.FF') sample_time
|
||||
, ROUND(SUM(pga_allocated)/1024/1024) total_pga_mb
|
||||
, ROUND(SUM(temp_space_allocated)/1024/1024) total_temp_mp
|
||||
, COUNT(DISTINCT session_id||':'||session_serial#) act_sessions
|
||||
FROM
|
||||
v$active_session_history
|
||||
GROUP BY
|
||||
sample_time
|
||||
ORDER BY total_pga_mb
|
||||
DESC
|
||||
)
|
||||
WHERE rownum <= 10
|
||||
/
|
||||
|
||||
|
||||
98
tpt/ash/ashpeak.sql
Normal file
98
tpt/ash/ashpeak.sql
Normal file
@@ -0,0 +1,98 @@
|
||||
-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ashpeak.sql
|
||||
-- Purpose:
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) https://tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @ashpeak <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dashpeak.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL "%Total" FOR A7 JUST RIGHT
|
||||
--COL p1 FOR 99999999999999
|
||||
--COL p2 FOR 99999999999999
|
||||
--COL p3 FOR 99999999999999
|
||||
COL p1text FOR A30 word_wrap
|
||||
COL p2text FOR A30 word_wrap
|
||||
COL p3text FOR A30 word_wrap
|
||||
COL p1hex FOR A17
|
||||
COL p2hex FOR A17
|
||||
COL p3hex FOR A17
|
||||
COL dop FOR 99
|
||||
COL AAS FOR 9999999999.9
|
||||
COL log2_aas_4k FOR A14 HEAD "Log(2,AAS)" JUST LEFT
|
||||
COL totalseconds HEAD "Total|Seconds" FOR 99999999
|
||||
COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999
|
||||
COL event FOR A42 WORD_WRAP
|
||||
COL event2 FOR A42 WORD_WRAP
|
||||
COL time_model_name FOR A50 WORD_WRAP
|
||||
COL program2 FOR A40 TRUNCATE
|
||||
COL username FOR A20 wrap
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL sql_opname FOR A20
|
||||
COL top_level_call_name FOR A30
|
||||
COL wait_class FOR A15
|
||||
|
||||
PROMPT
|
||||
PROMPT AAS by &1 within time range between &3 and &4
|
||||
|
||||
WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat)
|
||||
SELECT
|
||||
&1
|
||||
, COUNT(*) totalseconds
|
||||
, ROUND(COUNT(*) / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400, 1) AAS
|
||||
, LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%Total"
|
||||
, '|'||RPAD(NVL(RPAD('#', ROUND(LOG(2,COUNT(*) / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400), 1), '#'),' '), 12)||'|' log2_aas_4k
|
||||
FROM (
|
||||
SELECT
|
||||
TRUNC(sample_time, 'DD') dd
|
||||
, TRUNC(sample_time, 'HH') hh
|
||||
, TRUNC(sample_time, 'MI') mi
|
||||
, TO_DATE(SUBSTR(TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI'), 1, 15)||'0', 'YYYY-MM-DD HH24:MI') mt
|
||||
, CAST(sample_time AS DATE) ss
|
||||
, NVL(a.event, a.session_state)||
|
||||
CASE
|
||||
WHEN a.event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass)
|
||||
THEN (SELECT class FROM bclass WHERE r = a.p3)
|
||||
ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual)
|
||||
END ||']'
|
||||
ELSE null
|
||||
END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU)
|
||||
, a.*
|
||||
, u.username
|
||||
, o.*
|
||||
FROM
|
||||
v$active_session_history a
|
||||
, dba_users u
|
||||
, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.current_obj# = o.object_id(+)
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
)
|
||||
GROUP BY
|
||||
&1
|
||||
ORDER BY
|
||||
&1
|
||||
/
|
||||
|
||||
119
tpt/ash/ashpeaktop.sql
Normal file
119
tpt/ash/ashpeaktop.sql
Normal file
@@ -0,0 +1,119 @@
|
||||
-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ashpeak.sql
|
||||
-- Purpose:
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) https://tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @dashpeaktop <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dashpeak.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL "%Total" FOR A7 JUST RIGHT
|
||||
--COL p1 FOR 99999999999999
|
||||
--COL p2 FOR 99999999999999
|
||||
--COL p3 FOR 99999999999999
|
||||
COL p1text FOR A30 word_wrap
|
||||
COL p2text FOR A30 word_wrap
|
||||
COL p3text FOR A30 word_wrap
|
||||
COL p1hex FOR A17
|
||||
COL p2hex FOR A17
|
||||
COL p3hex FOR A17
|
||||
COL dop FOR 99
|
||||
COL AAS FOR 9999999999.9
|
||||
COL log2_aas_4k FOR A14 HEAD "Log(2,AAS)" JUST LEFT
|
||||
COL totalseconds HEAD "Total|Seconds" FOR 99999999
|
||||
COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999
|
||||
COL event FOR A42 WORD_WRAP
|
||||
COL event2 FOR A42 WORD_WRAP
|
||||
COL time_model_name FOR A50 WORD_WRAP
|
||||
COL program2 FOR A40 TRUNCATE
|
||||
COL username FOR A20 wrap
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL sql_opname FOR A20
|
||||
COL top_level_call_name FOR A30
|
||||
COL wait_class FOR A15
|
||||
|
||||
PROMPT
|
||||
PROMPT Top AAS peaks within time range between &3 and &4
|
||||
|
||||
WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat)
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
&1
|
||||
, COUNT(*) sessions
|
||||
, COUNT(*) totalseconds
|
||||
, ROUND(COUNT(*) / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400, 1) AAS
|
||||
FROM (
|
||||
SELECT
|
||||
TRUNC(sample_time, 'DD') dd
|
||||
, TRUNC(sample_time, 'HH') hh
|
||||
, TRUNC(sample_time, 'MI') mi
|
||||
, TO_DATE(SUBSTR(TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI'), 1, 15)||'0', 'YYYY-MM-DD HH24:MI') mt
|
||||
, CAST(sample_time AS DATE) ss
|
||||
, NVL(a.event, a.session_state)||
|
||||
CASE
|
||||
WHEN a.event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass)
|
||||
THEN (SELECT class FROM bclass WHERE r = a.p3)
|
||||
ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual)
|
||||
END ||']'
|
||||
ELSE null
|
||||
END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU)
|
||||
, a.*
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name
|
||||
FROM
|
||||
gv$active_session_history a
|
||||
WHERE
|
||||
&2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
)
|
||||
GROUP BY
|
||||
&1
|
||||
ORDER BY
|
||||
totalseconds DESC
|
||||
)
|
||||
WHERE
|
||||
rownum <= 25
|
||||
/
|
||||
|
||||
133
tpt/ash/ashtop.sql
Normal file
133
tpt/ash/ashtop.sql
Normal file
@@ -0,0 +1,133 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ashtop.sql v1.2
|
||||
-- Purpose: Display top ASH time (count of ASH samples) grouped by your
|
||||
-- specified dimensions
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) http://blog.tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @ashtop <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
-- @ashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dashtop.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL "%This" FOR A7
|
||||
--COL p1 FOR 99999999999999
|
||||
--COL p2 FOR 99999999999999
|
||||
--COL p3 FOR 99999999999999
|
||||
COL p1text FOR A30 word_wrap
|
||||
COL p2text FOR A30 word_wrap
|
||||
COL p3text FOR A30 word_wrap
|
||||
COL p1hex FOR A17
|
||||
COL p2hex FOR A17
|
||||
COL p3hex FOR A17
|
||||
COL dop FOR 99
|
||||
COL AAS FOR 9999.9
|
||||
COL totalseconds HEAD "Total|Seconds" FOR 99999999
|
||||
COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999
|
||||
COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999
|
||||
COL event FOR A42 WORD_WRAP
|
||||
COL event2 FOR A42 WORD_WRAP
|
||||
COL time_model_name FOR A50 WORD_WRAP
|
||||
COL program2 FOR A40 TRUNCATE
|
||||
COL username FOR A20 wrap
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL sql_opname FOR A20
|
||||
COL top_level_call_name FOR A30
|
||||
COL wait_class FOR A15
|
||||
|
||||
SELECT
|
||||
*
|
||||
FROM (
|
||||
WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat)
|
||||
SELECT /*+ LEADING(a) USE_HASH(u) */
|
||||
COUNT(*) totalseconds
|
||||
, ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This"
|
||||
, &1
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
-- , MAX(sql_exec_id) - MIN(sql_exec_id)
|
||||
, COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen
|
||||
, COUNT(DISTINCT sample_time) dist_timestamps
|
||||
FROM
|
||||
(SELECT
|
||||
a.*
|
||||
, session_id sid
|
||||
, session_serial# serial
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
, TRUNC(px_flags / 2097152) dop
|
||||
, NVL(a.event, a.session_state)||
|
||||
CASE
|
||||
WHEN a.event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass)
|
||||
THEN (SELECT class FROM bclass WHERE r = a.p3)
|
||||
ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual)
|
||||
END ||']'
|
||||
ELSE null
|
||||
END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU)
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name
|
||||
FROM gv$active_session_history a) a
|
||||
, dba_users u
|
||||
, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.current_obj# = o.object_id(+)
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
&1
|
||||
ORDER BY
|
||||
TotalSeconds DESC
|
||||
, &1
|
||||
)
|
||||
WHERE
|
||||
ROWNUM <= 15
|
||||
/
|
||||
|
||||
104
tpt/ash/ashtop10.sql
Normal file
104
tpt/ash/ashtop10.sql
Normal file
@@ -0,0 +1,104 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ashtop.sql v1.2
|
||||
-- Purpose: Display top ASH time (count of ASH samples) grouped by your
|
||||
-- specified dimensions
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) http://blog.tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @ashtop <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
-- @ashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dashtop.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL "%This" FOR A7
|
||||
--COL p1 FOR 99999999999999
|
||||
--COL p2 FOR 99999999999999
|
||||
--COL p3 FOR 99999999999999
|
||||
COL p1text FOR A30 word_wrap
|
||||
COL p2text FOR A30 word_wrap
|
||||
COL p3text FOR A30 word_wrap
|
||||
COL p1hex FOR A17
|
||||
COL p2hex FOR A17
|
||||
COL p3hex FOR A17
|
||||
COL AAS FOR 9999.9
|
||||
COL totalseconds HEAD "Total|Seconds" FOR 99999999
|
||||
COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999
|
||||
COL event FOR A42 WORD_WRAP
|
||||
COL event2 FOR A42 WORD_WRAP
|
||||
COL time_model_name FOR A50 WORD_WRAP
|
||||
COL program2 FOR A40 TRUNCATE
|
||||
COL username FOR A20 wrap
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL sql_opname FOR A20
|
||||
COL top_level_call_name FOR A30
|
||||
COL wait_class FOR A15
|
||||
|
||||
SELECT
|
||||
*
|
||||
FROM (
|
||||
WITH bclass AS (SELECT class, ROWNUM r from v$waitstat)
|
||||
SELECT /*+ LEADING(a) USE_HASH(u) */
|
||||
COUNT(*) totalseconds
|
||||
, ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This"
|
||||
, &1
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
FROM
|
||||
(SELECT
|
||||
a.*
|
||||
, session_id sid
|
||||
, session_serial# serial
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
, NVL(event, session_state)||
|
||||
CASE
|
||||
WHEN event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass)
|
||||
THEN (SELECT class FROM bclass WHERE r = a.p3)
|
||||
ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual)
|
||||
END ||']'
|
||||
ELSE null
|
||||
END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU)
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
FROM gv$active_session_history a) a
|
||||
, dba_users u
|
||||
, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.current_obj# = o.object_id(+)
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
&1
|
||||
ORDER BY
|
||||
TotalSeconds DESC
|
||||
, &1
|
||||
)
|
||||
WHERE
|
||||
ROWNUM <= 15
|
||||
/
|
||||
|
||||
154
tpt/ash/ashtopsum.sql
Normal file
154
tpt/ash/ashtopsum.sql
Normal file
@@ -0,0 +1,154 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ashtopsum.sql v1.3
|
||||
-- Purpose: Display top ASH time (count of ASH samples) grouped by your
|
||||
-- specified dimensions AND (potentially lossy) SUM of IO rate metrics
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) http://blog.tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @ashtopsum <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
-- @ashtopsum username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dashtopsum.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL "%This" FOR A7
|
||||
--COL p1 FOR 99999999999999
|
||||
--COL p2 FOR 99999999999999
|
||||
--COL p3 FOR 99999999999999
|
||||
COL p1text FOR A30 word_wrap
|
||||
COL p2text FOR A30 word_wrap
|
||||
COL p3text FOR A30 word_wrap
|
||||
COL p1hex FOR A17
|
||||
COL p2hex FOR A17
|
||||
COL p3hex FOR A17
|
||||
COL dop FOR 99
|
||||
COL AAS FOR 9999.9
|
||||
COL totalseconds HEAD "Total|Seconds" FOR 99999999
|
||||
COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999
|
||||
COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999
|
||||
COL event FOR A42 WORD_WRAP
|
||||
COL event2 FOR A42 WORD_WRAP
|
||||
COL time_model_name FOR A50 WORD_WRAP
|
||||
COL program2 FOR A40 TRUNCATE
|
||||
COL username FOR A20 wrap
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL sql_opname FOR A20
|
||||
COL top_level_call_name FOR A30
|
||||
COL wait_class FOR A15
|
||||
|
||||
COL rd_rq FOR 999,999,999
|
||||
COL wr_rq FOR 999,999,999
|
||||
COL rd_mb FOR 999,999,999
|
||||
COL wr_mb FOR 999,999,999
|
||||
COL pgamem_mb FOR 9,999,999
|
||||
COL tempspc_mb FOR 99,999,999
|
||||
|
||||
PROMPT This is an experimental script as some documentation/explanation is needed.
|
||||
PROMPT The ASH "delta" metrics are not tied to individual SQL_IDs or wait events,
|
||||
PROMPT They are valid in the session scope (and related mostly static attributes,
|
||||
PROMPT like PROGRAM, MACHINE, MODULE). Which SQL_ID/operation/event happens to be
|
||||
PROMPT active when ASH samples its data is just matter of luck.
|
||||
|
||||
SELECT
|
||||
*
|
||||
FROM (
|
||||
WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat)
|
||||
SELECT /*+ LEADING(a) USE_HASH(u) */
|
||||
COUNT(*) totalseconds
|
||||
, ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This"
|
||||
, SUM(delta_read_io_requests) rd_rq
|
||||
, SUM(delta_write_io_requests) wr_rq
|
||||
, SUM(delta_read_io_bytes)/1048576 rd_mb
|
||||
, SUM(delta_write_io_bytes)/1048576 wr_mb
|
||||
--, SUM(delta_interconnect_io_bytes)
|
||||
--, SUM(delta_read_mem_bytes)
|
||||
, MAX(pga_allocated)/1048576 pgamem_mb
|
||||
, MAX(temp_space_allocated)/1048576 tempspc_mb
|
||||
, &1
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
-- , MAX(sql_exec_id) - MIN(sql_exec_id)
|
||||
, COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen
|
||||
, COUNT(DISTINCT sample_time) dist_timestamps
|
||||
FROM
|
||||
(SELECT
|
||||
a.*
|
||||
, session_id sid
|
||||
, session_serial# serial
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
, TRUNC(px_flags / 2097152) dop
|
||||
, NVL(a.event, a.session_state)||
|
||||
CASE
|
||||
WHEN a.event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass)
|
||||
THEN (SELECT class FROM bclass WHERE r = a.p3)
|
||||
ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual)
|
||||
END ||']'
|
||||
ELSE null
|
||||
END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU)
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name
|
||||
FROM gv$active_session_history a) a
|
||||
, dba_users u
|
||||
, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.current_obj# = o.object_id(+)
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
&1
|
||||
ORDER BY
|
||||
TotalSeconds DESC
|
||||
, &1
|
||||
)
|
||||
WHERE
|
||||
ROWNUM <= 20
|
||||
/
|
||||
|
||||
43
tpt/ash/asqlflame.sql
Normal file
43
tpt/ash/asqlflame.sql
Normal file
@@ -0,0 +1,43 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- prototype script for displaying execution plan profile as a flame chart
|
||||
-- @sqlflame.sql <sqlid> <child#>
|
||||
|
||||
SET HEADING OFF LINESIZE 32767 PAGESIZE 0 TRIMSPOOL ON TRIMOUT ON LONG 9999999 VERIFY OFF LONGCHUNKSIZE 100000 FEEDBACK OFF APPINFO OFF
|
||||
SET TERMOUT OFF
|
||||
--SET TIMING OFF
|
||||
|
||||
WITH sq AS (
|
||||
SELECT /*+ MATERIALIZE */
|
||||
sp.id, sp.parent_id, sp.operation, sp.options
|
||||
, sp.object_owner, sp.object_name, ss.last_elapsed_time, ss.elapsed_time
|
||||
FROM v$sql_plan_statistics ss, v$sql_plan sp
|
||||
WHERE
|
||||
sp.sql_id=ss.sql_id
|
||||
AND sp.child_number=ss.child_number
|
||||
AND sp.address=ss.address
|
||||
AND sp.id=ss.operation_id
|
||||
AND sp.sql_id='&1'
|
||||
AND sp.child_number=&2
|
||||
)
|
||||
SELECT
|
||||
'0 - SELECT STATEMENT'||TRIM(SYS_CONNECT_BY_PATH(id||' - '||operation||NVL2(options,' '||options,NULL)||NVL2(object_owner||object_name, ' ['||object_owner||'.'||object_name||']', NULL), ';'))||' '||TRIM(ROUND(elapsed_time/1000))
|
||||
FROM
|
||||
sq
|
||||
CONNECT BY
|
||||
parent_id = PRIOR id
|
||||
START WITH parent_id = 0
|
||||
.
|
||||
|
||||
spool $HOME/sqlflame_stacks.txt
|
||||
/
|
||||
spool off
|
||||
|
||||
|
||||
SET TERMOUT ON HEADING ON PAGESIZE 5000 LINESIZE 999 FEEDBACK ON
|
||||
--SET TIMING ON
|
||||
|
||||
HOST $HOME/dev/FlameGraph/flamegraph.pl --countname=Milliseconds --title="sql_id=&1" $HOME/sqlflame_stacks.txt > $HOME/sqlflame_&1..svg
|
||||
HOST OPEN $HOME/sqlflame_&1..svg
|
||||
|
||||
111
tpt/ash/asqlmon.sql
Normal file
111
tpt/ash/asqlmon.sql
Normal file
@@ -0,0 +1,111 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: asqlmon.sql (v1.3)
|
||||
--
|
||||
-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
--
|
||||
-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved.
|
||||
--
|
||||
-- Disclaimer: This script is provided "as is", no warranties nor guarantees are
|
||||
-- made. Use at your own risk :)
|
||||
--
|
||||
-- Usage: @asqlmon <sqlid> <child#> <from_time> <to_time>
|
||||
--
|
||||
-- Notes: This script runs on Oracle 11g+ and you should have the
|
||||
-- Diagnostics pack license for using it as it queries
|
||||
-- some separately licensed views.
|
||||
--
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON
|
||||
|
||||
COL asqlmon_operation HEADING Plan_Operation FORMAT A72
|
||||
COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap
|
||||
COL obj_alias_qbc_name FOR a40
|
||||
COL options FOR a30
|
||||
|
||||
COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE FOR 99999999999
|
||||
COL asqlmon_sql_id HEAD SQL_ID
|
||||
COL asqlmon_sql_child HEAD CHILD FOR 999999
|
||||
|
||||
COL pct_child HEAD "Activity %" FOR A8
|
||||
COL pct_child_vis HEAD "Visual" FOR A12
|
||||
|
||||
COL asqlmon_id HEAD "ID" FOR 9999
|
||||
COL asqlmon_parent_id HEAD "PID" FOR 9999
|
||||
|
||||
|
||||
BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_operation
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ASQLMon v1.3 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH
|
||||
|
||||
WITH sample_times AS (
|
||||
select * from dual
|
||||
),
|
||||
sq AS (
|
||||
SELECT
|
||||
count(*) samples
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events
|
||||
FROM
|
||||
v$active_session_history ash
|
||||
WHERE
|
||||
1=1
|
||||
AND ash.sql_id LIKE '&1'
|
||||
AND ash.sql_child_number LIKE '&2'
|
||||
AND ash.sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1)
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
)
|
||||
SELECT
|
||||
-- plan.sql_id asqlmon_sql_id
|
||||
plan.child_number asqlmon_sql_child
|
||||
, plan.plan_hash_value asqlmon_plan_hash_value
|
||||
, sq.samples seconds
|
||||
, LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis
|
||||
--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id
|
||||
, plan.id asqlmon_id
|
||||
, plan.parent_id asqlmon_parent_id
|
||||
, LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation
|
||||
, sq.session_state
|
||||
, sq.event
|
||||
-- , sq.avg_p3
|
||||
, plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name
|
||||
-- , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1990) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1990) END asqlmon_predicates
|
||||
-- , plan.projection
|
||||
FROM
|
||||
v$sql_plan plan
|
||||
, sq
|
||||
WHERE
|
||||
1=1
|
||||
AND sq.sql_id(+) = plan.sql_id
|
||||
AND sq.sql_child_number(+) = plan.child_number
|
||||
AND sq.sql_plan_line_id(+) = plan.id
|
||||
AND sq.sql_plan_hash_value(+) = plan.plan_hash_value
|
||||
AND plan.sql_id LIKE '&1'
|
||||
AND plan.child_number LIKE '&2'
|
||||
ORDER BY
|
||||
plan.child_number
|
||||
, plan.plan_hash_value
|
||||
, plan.id
|
||||
/
|
||||
117
tpt/ash/asqlmon12.sql
Normal file
117
tpt/ash/asqlmon12.sql
Normal file
@@ -0,0 +1,117 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: asqlmon.sql (v1.2)
|
||||
--
|
||||
-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
--
|
||||
-- Copyright: (c) https://tanelpoder.com - All rights reserved.
|
||||
--
|
||||
-- Disclaimer: This script is provided "as is", no warranties nor guarantees are
|
||||
-- made. Use at your own risk :)
|
||||
--
|
||||
-- Usage: @asqlmon <sqlid> <child#> <from_time> <to_time>
|
||||
--
|
||||
-- Notes: This script runs on Oracle 11g+ and you should have the
|
||||
-- Diagnostics pack license for using it as it queries
|
||||
-- some separately licensed views.
|
||||
--
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON
|
||||
|
||||
COL asqlmon_operation HEAD Plan_Operation FOR a72
|
||||
COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap
|
||||
COL obj_alias_qbc_name FOR a40
|
||||
COL options FOR a30
|
||||
|
||||
COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE PRINT
|
||||
COL asqlmon_sql_id HEAD SQL_ID NOPRINT
|
||||
COL asqlmon_sql_child HEAD "CHILD" PRINT
|
||||
COL asqlmon_sample_time HEAD SAMPLE_HOUR
|
||||
COL projection FOR A520
|
||||
|
||||
COL pct_child HEAD "Activity %" FOR A8
|
||||
COL pct_child_vis HEAD "Visual" FOR A12
|
||||
|
||||
COL asqlmon_id HEAD "ID" FOR 9999
|
||||
COL asqlmon_parent_id HEAD "PID" FOR 9999
|
||||
|
||||
|
||||
BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ASQLMon v1.1 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH
|
||||
|
||||
WITH sample_times AS (
|
||||
select * from dual
|
||||
),
|
||||
sq AS (
|
||||
SELECT
|
||||
count(*) samples
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.sql_full_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events
|
||||
FROM
|
||||
v$active_session_history ash
|
||||
WHERE
|
||||
1=1
|
||||
AND ash.sql_id LIKE '&1'
|
||||
AND ash.sql_child_number LIKE '&2'
|
||||
AND ash.sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.sql_full_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1)
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
)
|
||||
SELECT
|
||||
plan.sql_id asqlmon_sql_id
|
||||
, plan.child_number asqlmon_sql_child
|
||||
, plan.full_plan_hash_value asqlmon_full_plan_hash_value
|
||||
, plan.plan_hash_value asqlmon_plan_hash_value
|
||||
, sq.samples seconds
|
||||
, LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis
|
||||
--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id
|
||||
, plan.id asqlmon_id
|
||||
, plan.parent_id asqlmon_parent_id
|
||||
, LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation
|
||||
, sq.session_state
|
||||
, sq.event
|
||||
-- , sq.avg_p3
|
||||
, plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name
|
||||
-- , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1990) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1990) END asqlmon_predicates
|
||||
-- , plan.projection
|
||||
FROM
|
||||
v$sql_plan plan
|
||||
, sq
|
||||
WHERE
|
||||
1=1
|
||||
AND sq.sql_id(+) = plan.sql_id
|
||||
AND sq.sql_child_number(+) = plan.child_number
|
||||
AND sq.sql_plan_line_id(+) = plan.id
|
||||
AND sq.sql_full_plan_hash_value(+) = plan.full_plan_hash_value
|
||||
--AND sq.sql_plan_hash_value(+) = plan.plan_hash_value
|
||||
AND plan.sql_id LIKE '&1'
|
||||
AND plan.child_number LIKE '&2'
|
||||
ORDER BY
|
||||
plan.child_number
|
||||
, plan.plan_hash_value
|
||||
, plan.id
|
||||
/
|
||||
112
tpt/ash/asqlmonx.sql
Normal file
112
tpt/ash/asqlmonx.sql
Normal file
@@ -0,0 +1,112 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: asqlmon.sql (v1.1)
|
||||
--
|
||||
-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
--
|
||||
-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved.
|
||||
--
|
||||
-- Disclaimer: This script is provided "as is", no warranties nor guarantees are
|
||||
-- made. Use at your own risk :)
|
||||
--
|
||||
-- Usage: @asqlmon <sqlid> <child#> <from_time> <to_time>
|
||||
--
|
||||
-- Notes: This script runs on Oracle 11g+ and you should have the
|
||||
-- Diagnostics pack license for using it as it queries
|
||||
-- some separately licensed views.
|
||||
--
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON
|
||||
|
||||
COL asqlmon_operation HEAD Plan_Operation FOR a72
|
||||
COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap
|
||||
COL obj_alias_qbc_name FOR a40
|
||||
COL options FOR a30
|
||||
|
||||
COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE PRINT
|
||||
COL asqlmon_sql_id HEAD SQL_ID NOPRINT
|
||||
COL asqlmon_sql_child HEAD "CHILD" PRINT
|
||||
COL asqlmon_sample_time HEAD SAMPLE_HOUR
|
||||
COL projection FOR A520
|
||||
|
||||
COL pct_child HEAD "Activity %" FOR A8
|
||||
COL pct_child_vis HEAD "Visual" FOR A12
|
||||
|
||||
COL asqlmon_id HEAD "ID" FOR 9999
|
||||
COL asqlmon_parent_id HEAD "PID" FOR 9999
|
||||
|
||||
BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation
|
||||
|
||||
PROMPT
|
||||
PROMPT -- ASQLMon eXtended v1.1 - by Tanel Poder ( http://blog.tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH
|
||||
|
||||
WITH sample_times AS (
|
||||
select * from dual
|
||||
),
|
||||
sq AS (
|
||||
SELECT
|
||||
count(*) samples
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events
|
||||
FROM
|
||||
v$active_session_history ash
|
||||
WHERE
|
||||
1=1
|
||||
AND ash.sql_id LIKE '&1'
|
||||
AND ash.sql_child_number LIKE '&2'
|
||||
AND ash.sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, NVL(ash.sql_plan_line_id,1)
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
)
|
||||
SELECT
|
||||
plan.sql_id asqlmon_sql_id
|
||||
, plan.child_number asqlmon_sql_child
|
||||
, plan.plan_hash_value asqlmon_plan_hash_value
|
||||
, sq.samples seconds
|
||||
, LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis
|
||||
--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id
|
||||
, plan.id asqlmon_id
|
||||
, plan.parent_id asqlmon_parent_id
|
||||
, LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation
|
||||
, sq.session_state
|
||||
, sq.event
|
||||
-- , sq.avg_p3
|
||||
, plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name
|
||||
, CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1990) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1990) END asqlmon_predicates
|
||||
, plan.projection
|
||||
FROM
|
||||
v$sql_plan plan
|
||||
, sq
|
||||
WHERE
|
||||
1=1
|
||||
AND sq.sql_id(+) = plan.sql_id
|
||||
AND sq.sql_child_number(+) = plan.child_number
|
||||
AND sq.sql_plan_line_id(+) = plan.id
|
||||
AND sq.sql_plan_hash_value(+) = plan.plan_hash_value
|
||||
AND plan.sql_id LIKE '&1'
|
||||
AND plan.child_number LIKE '&2'
|
||||
ORDER BY
|
||||
plan.child_number
|
||||
, plan.plan_hash_value
|
||||
, plan.id
|
||||
/
|
||||
132
tpt/ash/bash_wait_chains.sql
Normal file
132
tpt/ash/bash_wait_chains.sql
Normal file
@@ -0,0 +1,132 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ash_wait_chains.sql (v0.2 BETA)
|
||||
-- Purpose: Display ASH wait chains (multi-session wait signature, a session
|
||||
-- waiting for another session etc.)
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) http://blog.tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @ash_wait_chains <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
-- @ash_wait_chains username||':'||program2||event2 session_type='FOREGROUND' sysdate-1/24 sysdate
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory V$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dash_wait_chains.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
-- Oracle 10g does not have the BLOCKING_INST_ID column in ASH so you'll need
|
||||
-- to comment out this column in this script. This may give you somewhat
|
||||
-- incorrect results in RAC environment with global blockers.
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL wait_chain FOR A300 WORD_WRAP
|
||||
COL "%This" FOR A6
|
||||
|
||||
PROMPT
|
||||
PROMPT -- Display ASH Wait Chain Signatures script v0.4 BETA by Tanel Poder ( http://blog.tanelpoder.com )
|
||||
|
||||
WITH
|
||||
bclass AS (SELECT class, ROWNUM r from v$waitstat),
|
||||
ash AS (SELECT /*+ QB_NAME(ash) LEADING(a) USE_HASH(u) SWAP_JOIN_INPUTS(u) */
|
||||
a.*
|
||||
, u.username
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, NVL(a.event||CASE WHEN a.event IN ('buffer busy waits', 'gc buffer busy', 'gc buffer busy acquire', 'gc buffer busy release')
|
||||
THEN ' ['||NVL((SELECT class FROM bclass WHERE r = a.p3),'undo @bclass '||a.p3)||']' ELSE null END,'ON CPU')
|
||||
|| ' ' event2
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
, CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name
|
||||
FROM
|
||||
&ashtable. a
|
||||
, dba_users u
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
),
|
||||
ash_samples AS (SELECT DISTINCT sample_id FROM ash),
|
||||
ash_data AS (SELECT * FROM ash),
|
||||
chains AS (
|
||||
SELECT
|
||||
sample_time ts
|
||||
, level lvl
|
||||
, session_id sid
|
||||
, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this
|
||||
--, SYS_CONNECT_BY_PATH(&1, ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN '('||d.session_id||')' ELSE NULL END path
|
||||
-- , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND LEVEL > 1 THEN ' [sid='||session_id||' seq#='||TO_CHAR(seq#)||']' ELSE NULL END path -- there's a reason why I'm doing this
|
||||
--, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') path -- there's a reason why I'm doing this (ORA-30004 :)
|
||||
, CASE WHEN CONNECT_BY_ISLEAF = 1 THEN d.session_id ELSE NULL END sids
|
||||
, CONNECT_BY_ISLEAF isleaf
|
||||
, CONNECT_BY_ISCYCLE iscycle
|
||||
, d.*
|
||||
FROM
|
||||
ash_samples s
|
||||
, ash_data d
|
||||
WHERE
|
||||
s.sample_id = d.sample_id
|
||||
AND d.sample_time BETWEEN &3 AND &4
|
||||
CONNECT BY NOCYCLE
|
||||
( PRIOR d.blocking_session = d.session_id
|
||||
-- ash was saved from V$ not GV$ - AND PRIOR d.blocking_inst_id = d.inst_id
|
||||
AND PRIOR s.sample_id = d.sample_id
|
||||
)
|
||||
START WITH &2
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This"
|
||||
, COUNT(*) seconds
|
||||
, ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, path wait_chain
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
-- , COUNT(DISTINCT sids)
|
||||
-- , MIN(sids)
|
||||
-- , MAX(sids)
|
||||
FROM
|
||||
chains
|
||||
WHERE
|
||||
isleaf = 1
|
||||
GROUP BY
|
||||
&1
|
||||
, path
|
||||
ORDER BY
|
||||
COUNT(*) DESC
|
||||
)
|
||||
WHERE
|
||||
ROWNUM <= 30
|
||||
/
|
||||
|
||||
129
tpt/ash/bashtop.sql
Normal file
129
tpt/ash/bashtop.sql
Normal file
@@ -0,0 +1,129 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ashtop.sql v1.2
|
||||
-- Purpose: Display top ASH time (count of ASH samples) grouped by your
|
||||
-- specified dimensions
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) http://blog.tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @ashtop <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
-- @ashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory V$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dashtop.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL "%This" FOR A7
|
||||
--COL p1 FOR 99999999999999
|
||||
--COL p2 FOR 99999999999999
|
||||
--COL p3 FOR 99999999999999
|
||||
COL p1text FOR A30 word_wrap
|
||||
COL p2text FOR A30 word_wrap
|
||||
COL p3text FOR A30 word_wrap
|
||||
COL p1hex FOR A17
|
||||
COL p2hex FOR A17
|
||||
COL p3hex FOR A17
|
||||
COL AAS FOR 9999.9
|
||||
COL totalseconds HEAD "Total|Seconds" FOR 99999999
|
||||
COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999
|
||||
COL event FOR A42 WORD_WRAP
|
||||
COL event2 FOR A42 WORD_WRAP
|
||||
COL time_model_name FOR A50 WORD_WRAP
|
||||
COL program2 FOR A40 TRUNCATE
|
||||
COL username FOR A20 wrap
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL sql_opname FOR A20
|
||||
COL top_level_call_name FOR A30
|
||||
COL wait_class FOR A15
|
||||
|
||||
SELECT * FROM (
|
||||
WITH bclass AS (SELECT class, ROWNUM r from v$waitstat)
|
||||
SELECT /*+ LEADING(a) USE_HASH(u) */
|
||||
COUNT(*) totalseconds
|
||||
, ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This"
|
||||
, &1
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
-- , MAX(sql_exec_id) - MIN(sql_exec_id)
|
||||
, COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen
|
||||
FROM
|
||||
(SELECT
|
||||
a.*
|
||||
, session_id sid
|
||||
, session_serial# serial
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
, NVL(event, session_state)||
|
||||
CASE
|
||||
WHEN event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN ('buffer busy waits', 'gc buffer busy', 'gc buffer busy acquire', 'gc buffer busy release')
|
||||
THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass)
|
||||
THEN (SELECT class FROM bclass WHERE r = a.p3)
|
||||
ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual)
|
||||
END ||']'
|
||||
ELSE null
|
||||
END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU)
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name
|
||||
FROM
|
||||
&ashtable. a
|
||||
) a
|
||||
, dba_users u
|
||||
, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.current_obj# = o.object_id(+)
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
&1
|
||||
ORDER BY
|
||||
TotalSeconds DESC
|
||||
, &1
|
||||
)
|
||||
WHERE
|
||||
ROWNUM <= 15
|
||||
/
|
||||
|
||||
54
tpt/ash/bevent_hist.sql
Normal file
54
tpt/ash/bevent_hist.sql
Normal file
@@ -0,0 +1,54 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft
|
||||
-- for estimating the event counts (and average durations):
|
||||
-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678
|
||||
|
||||
COL evh_event HEAD "Wait Event" for A50 TRUNCATE
|
||||
COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12
|
||||
COL pct_evt_time HEAD "% Event|Time"
|
||||
COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,999.9
|
||||
COL evh_millisec HEAD "Wait time|bucket ms+" FOR A15 JUST RIGHT
|
||||
COL evh_sample_count HEAD "Num ASH|Samples"
|
||||
COL evh_est_event_count HEAD "Estimated|Total Waits"
|
||||
|
||||
BREAK ON evh_event SKIP 1
|
||||
|
||||
SELECT
|
||||
e.evh_event
|
||||
, e.evh_millisec
|
||||
, e.evh_sample_count
|
||||
, e.evh_est_event_count
|
||||
, e.evh_est_total_sec
|
||||
, ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time
|
||||
, '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph
|
||||
, first_seen
|
||||
, last_seen
|
||||
FROM (
|
||||
SELECT
|
||||
event evh_event
|
||||
, LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END, 15) evh_millisec
|
||||
, COUNT(*) evh_sample_count
|
||||
, ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count
|
||||
, ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END) / 1000,1) evh_est_total_sec
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
FROM
|
||||
&ashtable
|
||||
--gv$active_session_history
|
||||
WHERE
|
||||
regexp_like(event, '&1')
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity
|
||||
AND time_waited > 0
|
||||
GROUP BY
|
||||
event
|
||||
, CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END -- evh_millisec
|
||||
) e
|
||||
ORDER BY
|
||||
evh_event
|
||||
, evh_millisec
|
||||
/
|
||||
|
||||
48
tpt/ash/bevent_hist_micro.sql
Normal file
48
tpt/ash/bevent_hist_micro.sql
Normal file
@@ -0,0 +1,48 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft
|
||||
-- for estimating the event counts (and average durations):
|
||||
-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678
|
||||
|
||||
COL evh_event HEAD WAIT_EVENT for A50 TRUNCATE
|
||||
COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12
|
||||
COL pct_evt_time HEAD "% Event|Time"
|
||||
COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,999.9
|
||||
COL evh_millisec HEAD "Wait time|bucket us+" FOR A15 JUST RIGHT
|
||||
COL evh_event HEAD "Wait Event"
|
||||
COL evh_sample_count HEAD "Num ASH|Samples"
|
||||
COL evh_est_event_count HEAD "Estimated|Total Waits"
|
||||
|
||||
BREAK ON evh_event SKIP 1
|
||||
|
||||
SELECT
|
||||
e.*
|
||||
, ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time
|
||||
, '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph
|
||||
FROM (
|
||||
SELECT
|
||||
event evh_event
|
||||
, LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END, 15) evh_millisec
|
||||
, COUNT(*) evh_sample_count
|
||||
, ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count
|
||||
, ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END)/1000000,1) evh_est_total_sec
|
||||
FROM
|
||||
&ashtable
|
||||
--V$ACTIVE_SESSION_HISTORY
|
||||
--dba_hist_active_sess_history
|
||||
WHERE
|
||||
regexp_like(event, '&1')
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity
|
||||
AND time_waited > 0
|
||||
GROUP BY
|
||||
event
|
||||
, CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END -- evh_millisec
|
||||
) e
|
||||
ORDER BY
|
||||
evh_event
|
||||
, evh_millisec
|
||||
/
|
||||
|
||||
48
tpt/ash/bshortmon_logfilesync.sql
Normal file
48
tpt/ash/bshortmon_logfilesync.sql
Normal file
@@ -0,0 +1,48 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
COL wait_class FOR a15
|
||||
COL event FOR a55
|
||||
COL time_range HEAD "WAIT_TIM_BUCKET_US+" FOR 999,999,999,999
|
||||
COL avg_wait_us HEAD "AVG_WAIT_IN_BKT_US" FOR 999,999,999,999
|
||||
COL pct_event FOR a9
|
||||
COL pct_total FOR a9
|
||||
|
||||
BREAK ON event SKIP 1 DUPLICATES
|
||||
|
||||
-- TODO: ignore latest sample (0 waits)
|
||||
|
||||
SELECT
|
||||
session_state state
|
||||
, wait_class
|
||||
, event
|
||||
, ROUND(AVG(time_waited)) avg_wait_us
|
||||
, POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))) time_range
|
||||
, COUNT(*) samples
|
||||
, LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 100, 1), 999.9))||' %',8) pct_event
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 10), '#'), ' '), 10,' ')||'|' pct_event_vis
|
||||
, LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1), 999.9))||' %',8) pct_total
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_total_vis
|
||||
FROM
|
||||
dba_hist_ash_aug
|
||||
--gv$active_session_history
|
||||
--DBA_HIST_ACTIVE_SESS_HISTORY
|
||||
WHERE
|
||||
&2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
--AND sample_time BETWEEN TIMESTAMP'2013-10-01 13:54:00' AND TIMESTAMP'2013-10-01 13:55:00'
|
||||
AND (UPPER(wait_class) LIKE UPPER('%&1%') OR UPPER(event) LIKE UPPER('%&1%'))
|
||||
--AND program LIKE 'sqlplus%'
|
||||
GROUP BY
|
||||
session_state
|
||||
, wait_class
|
||||
, event
|
||||
, POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END)))
|
||||
ORDER BY
|
||||
session_state
|
||||
, wait_class
|
||||
, event
|
||||
, time_range NULLS FIRST
|
||||
, samples DESC
|
||||
/
|
||||
|
||||
46
tpt/ash/btime_model_phases.sql
Normal file
46
tpt/ash/btime_model_phases.sql
Normal file
@@ -0,0 +1,46 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
SELECT * FROM (
|
||||
SELECT /*+ LEADING(a) USE_HASH(u) */
|
||||
count(*)
|
||||
, LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This"
|
||||
, &1
|
||||
, CASE WHEN IN_CONNECTION_MGMT = 'Y' THEN 'CONNECTION_MGMT ' END ||
|
||||
CASE WHEN IN_PARSE = 'Y' THEN 'PARSE ' END ||
|
||||
CASE WHEN IN_HARD_PARSE = 'Y' THEN 'HARD_PARSE ' END ||
|
||||
CASE WHEN IN_SQL_EXECUTION = 'Y' THEN 'SQL_EXECUTION ' END ||
|
||||
CASE WHEN IN_PLSQL_EXECUTION = 'Y' THEN 'PLSQL_EXECUTION ' END ||
|
||||
CASE WHEN IN_PLSQL_RPC = 'Y' THEN 'PLSQL_RPC ' END ||
|
||||
CASE WHEN IN_PLSQL_COMPILATION = 'Y' THEN 'PLSQL_COMPILATION ' END ||
|
||||
CASE WHEN IN_JAVA_EXECUTION = 'Y' THEN 'JAVA_EXECUTION ' END ||
|
||||
CASE WHEN IN_BIND = 'Y' THEN 'BIND ' END ||
|
||||
CASE WHEN IN_CURSOR_CLOSE = 'Y' THEN 'CURSOR_CLOSE ' END ||
|
||||
CASE WHEN IN_SEQUENCE_LOAD = 'Y' THEN 'SEQUENCE_LOAD ' END phase
|
||||
FROM
|
||||
v$active_session_history a
|
||||
, dba_users u
|
||||
WHERE
|
||||
a.user_id = u.user_id(+)
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
AND session_type = 'FOREGROUND'
|
||||
GROUP BY
|
||||
&1
|
||||
, CASE WHEN IN_CONNECTION_MGMT = 'Y' THEN 'CONNECTION_MGMT ' END ||
|
||||
CASE WHEN IN_PARSE = 'Y' THEN 'PARSE ' END ||
|
||||
CASE WHEN IN_HARD_PARSE = 'Y' THEN 'HARD_PARSE ' END ||
|
||||
CASE WHEN IN_SQL_EXECUTION = 'Y' THEN 'SQL_EXECUTION ' END ||
|
||||
CASE WHEN IN_PLSQL_EXECUTION = 'Y' THEN 'PLSQL_EXECUTION ' END ||
|
||||
CASE WHEN IN_PLSQL_RPC = 'Y' THEN 'PLSQL_RPC ' END ||
|
||||
CASE WHEN IN_PLSQL_COMPILATION = 'Y' THEN 'PLSQL_COMPILATION ' END ||
|
||||
CASE WHEN IN_JAVA_EXECUTION = 'Y' THEN 'JAVA_EXECUTION ' END ||
|
||||
CASE WHEN IN_BIND = 'Y' THEN 'BIND ' END ||
|
||||
CASE WHEN IN_CURSOR_CLOSE = 'Y' THEN 'CURSOR_CLOSE ' END ||
|
||||
CASE WHEN IN_SEQUENCE_LOAD = 'Y' THEN 'SEQUENCE_LOAD ' END
|
||||
ORDER BY
|
||||
"%This" DESC
|
||||
)
|
||||
WHERE ROWNUM <= 20
|
||||
/
|
||||
|
||||
151
tpt/ash/cashtop.sql
Normal file
151
tpt/ash/cashtop.sql
Normal file
@@ -0,0 +1,151 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: cashtop.sql
|
||||
-- Purpose: Display top ASH time (count of ASH samples) grouped by your
|
||||
-- specified dimensions
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) http://blog.tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @cashtop <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
-- @cashtop pdb_name,username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the AWR's CDB_HIST_ACTIVE_SESS_HISTORY, use
|
||||
-- @ashtop.sql for accessiong the V$ ASH view
|
||||
--
|
||||
--
|
||||
-- TODO:
|
||||
-- Deal with cases where there's no AWR snapshot saved to DBA_HIST_SNAPSHOTS
|
||||
-- (due to a DB issue) but DBA_HIST_ASH samples are there
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
COL "%This" FOR A7
|
||||
COL p1text FOR A30 word_wrap
|
||||
COL p2text FOR A30 word_wrap
|
||||
COL p3text FOR A30 word_wrap
|
||||
COL p1hex FOR A17
|
||||
COL p2hex FOR A17
|
||||
COL p3hex FOR A17
|
||||
COL AAS FOR 9999.9
|
||||
COL totalseconds HEAD "Total|Seconds" FOR 99999999
|
||||
COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999
|
||||
COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999
|
||||
COL event FOR A42 WORD_WRAP
|
||||
COL event2 FOR A46 WORD_WRAP
|
||||
COL time_model_name FOR A50 WORD_WRAP
|
||||
COL program2 FOR A40 TRUNCATE
|
||||
COL username FOR A20 wrap
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL sql_opname FOR A20
|
||||
COL top_level_call_name FOR A30
|
||||
COL wait_class FOR A15
|
||||
COL sql_plan_op FOR A40
|
||||
|
||||
SELECT /*+ qb_name(main) */ * FROM (
|
||||
WITH bclass AS (SELECT class, ROWNUM r from v$waitstat)
|
||||
SELECT /*+ LEADING(a) USE_HASH(u) */
|
||||
10 * COUNT(*) "TotalSeconds"
|
||||
, ROUND(10 * COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This"
|
||||
, &1
|
||||
-- , 10 * SUM(CASE WHEN wait_class IS NULL THEN 1 ELSE 0 END) "CPU"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='User I/O' THEN 1 ELSE 0 END) "User I/O"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Application' THEN 1 ELSE 0 END) "Application"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Concurrency' THEN 1 ELSE 0 END) "Concurrency"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Commit' THEN 1 ELSE 0 END) "Commit"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Configuration' THEN 1 ELSE 0 END) "Configuration"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Cluster' THEN 1 ELSE 0 END) "Cluster"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Idle' THEN 1 ELSE 0 END) "Idle"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Network' THEN 1 ELSE 0 END) "Network"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='System I/O' THEN 1 ELSE 0 END) "System I/O"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Scheduler' THEN 1 ELSE 0 END) "Scheduler"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Administrative' THEN 1 ELSE 0 END) "Administrative"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Queueing' THEN 1 ELSE 0 END) "Queueing"
|
||||
-- , 10 * SUM(CASE WHEN wait_class ='Other' THEN 1 ELSE 0 END) "Other"
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
, COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen
|
||||
, COUNT(DISTINCT sample_time) dist_timestamps
|
||||
FROM
|
||||
(SELECT
|
||||
a.*
|
||||
, a.instance_number AS inst_id
|
||||
, a.sql_plan_operation||' '||a.sql_plan_options sql_plan_op
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
, NVL(event, session_state)||
|
||||
CASE
|
||||
WHEN event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass)
|
||||
THEN (SELECT class FROM bclass WHERE r = a.p3)
|
||||
ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual)
|
||||
END ||']'
|
||||
ELSE null
|
||||
-- event is NULL in ASH if the session is not waiting (session_state = ON CPU)
|
||||
END event2
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name
|
||||
FROM cdb_hist_active_sess_history a) a
|
||||
, cdb_users u
|
||||
, cdb_pdbs p
|
||||
, (SELECT
|
||||
con_id
|
||||
, object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM cdb_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.con_id = u.con_id (+)
|
||||
AND a.current_obj# = o.object_id (+)
|
||||
AND a.con_id = o.con_id (+)
|
||||
AND a.con_id = p.con_id (+)
|
||||
AND &2
|
||||
AND a.sample_time BETWEEN &3 AND &4
|
||||
GROUP BY
|
||||
&1
|
||||
ORDER BY
|
||||
"TotalSeconds" DESC
|
||||
, &1
|
||||
)
|
||||
WHERE
|
||||
ROWNUM <= 20
|
||||
/
|
||||
|
||||
119
tpt/ash/create_ash_without_timestamps.sql
Normal file
119
tpt/ash/create_ash_without_timestamps.sql
Normal file
@@ -0,0 +1,119 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
CREATE OR REPLACE VIEW t$ash AS
|
||||
SELECT
|
||||
SAMPLE_ID -- NUMBER
|
||||
, CAST(SAMPLE_TIME AS DATE) sample_time -- TIMESTAMP(3)
|
||||
, TO_CHAR(sample_time, 'YYYY') sample_year
|
||||
, TO_CHAR(sample_time, 'MM') sample_month_num
|
||||
, TO_CHAR(sample_time, 'MON') sample_mon
|
||||
, TO_CHAR(sample_time, 'Month') sample_month
|
||||
, TO_CHAR(sample_time, 'DD') sample_day
|
||||
, TO_CHAR(sample_time, 'HH24') sample_hour
|
||||
, TO_CHAR(sample_time, 'MI') sample_minute
|
||||
, TO_CHAR(sample_time, 'SS') sample_second
|
||||
, IS_AWR_SAMPLE -- VARCHAR2(1)
|
||||
, SESSION_ID -- NUMBER
|
||||
, SESSION_SERIAL# -- NUMBER
|
||||
, SESSION_TYPE -- VARCHAR2(10)
|
||||
, FLAGS -- NUMBER
|
||||
, a.USER_ID -- NUMBER
|
||||
, u.username
|
||||
, SQL_ID -- VARCHAR2(13)
|
||||
, IS_SQLID_CURRENT -- VARCHAR2(1)
|
||||
, SQL_CHILD_NUMBER -- NUMBER
|
||||
, SQL_OPCODE -- NUMBER
|
||||
, SQL_OPNAME -- VARCHAR2(64)
|
||||
, FORCE_MATCHING_SIGNATURE -- NUMBER
|
||||
, TOP_LEVEL_SQL_ID -- VARCHAR2(13)
|
||||
, TOP_LEVEL_SQL_OPCODE -- NUMBER
|
||||
, SQL_PLAN_HASH_VALUE -- NUMBER
|
||||
, SQL_PLAN_LINE_ID -- NUMBER
|
||||
, SQL_PLAN_OPERATION -- VARCHAR2(30)
|
||||
, SQL_PLAN_OPTIONS -- VARCHAR2(30)
|
||||
, SQL_EXEC_ID -- NUMBER
|
||||
, SQL_EXEC_START -- DATE
|
||||
, PLSQL_ENTRY_OBJECT_ID -- NUMBER
|
||||
, PLSQL_ENTRY_SUBPROGRAM_ID -- NUMBER
|
||||
, PLSQL_OBJECT_ID -- NUMBER
|
||||
, PLSQL_SUBPROGRAM_ID -- NUMBER
|
||||
, QC_INSTANCE_ID -- NUMBER
|
||||
, QC_SESSION_ID -- NUMBER
|
||||
, QC_SESSION_SERIAL# -- NUMBER
|
||||
, PX_FLAGS -- NUMBER
|
||||
, EVENT -- VARCHAR2(64)
|
||||
, EVENT_ID -- NUMBER
|
||||
, EVENT# -- NUMBER
|
||||
, SEQ# -- NUMBER
|
||||
, P1TEXT -- VARCHAR2(64)
|
||||
, P1 -- NUMBER
|
||||
, P2TEXT -- VARCHAR2(64)
|
||||
, P2 -- NUMBER
|
||||
, P3TEXT -- VARCHAR2(64)
|
||||
, P3 -- NUMBER
|
||||
, WAIT_CLASS -- VARCHAR2(64)
|
||||
, WAIT_CLASS_ID -- NUMBER
|
||||
, WAIT_TIME -- NUMBER
|
||||
, SESSION_STATE -- VARCHAR2(7)
|
||||
, TIME_WAITED -- NUMBER
|
||||
, BLOCKING_SESSION_STATUS -- VARCHAR2(11)
|
||||
, BLOCKING_SESSION -- NUMBER
|
||||
, BLOCKING_SESSION_SERIAL# -- NUMBER
|
||||
, BLOCKING_INST_ID -- NUMBER
|
||||
, BLOCKING_HANGCHAIN_INFO -- VARCHAR2(1)
|
||||
, CURRENT_OBJ# -- NUMBER
|
||||
, CURRENT_FILE# -- NUMBER
|
||||
, CURRENT_BLOCK# -- NUMBER
|
||||
, CURRENT_ROW# -- NUMBER
|
||||
, TOP_LEVEL_CALL# -- NUMBER
|
||||
, TOP_LEVEL_CALL_NAME -- VARCHAR2(64)
|
||||
, CONSUMER_GROUP_ID -- NUMBER
|
||||
, XID -- RAW(8)
|
||||
, REMOTE_INSTANCE# -- NUMBER
|
||||
, TIME_MODEL -- NUMBER
|
||||
, IN_CONNECTION_MGMT -- VARCHAR2(1)
|
||||
, IN_PARSE -- VARCHAR2(1)
|
||||
, IN_HARD_PARSE -- VARCHAR2(1)
|
||||
, IN_SQL_EXECUTION -- VARCHAR2(1)
|
||||
, IN_PLSQL_EXECUTION -- VARCHAR2(1)
|
||||
, IN_PLSQL_RPC -- VARCHAR2(1)
|
||||
, IN_PLSQL_COMPILATION -- VARCHAR2(1)
|
||||
, IN_JAVA_EXECUTION -- VARCHAR2(1)
|
||||
, IN_BIND -- VARCHAR2(1)
|
||||
, IN_CURSOR_CLOSE -- VARCHAR2(1)
|
||||
, IN_SEQUENCE_LOAD -- VARCHAR2(1)
|
||||
, CAPTURE_OVERHEAD -- VARCHAR2(1)
|
||||
, REPLAY_OVERHEAD -- VARCHAR2(1)
|
||||
, IS_CAPTURED -- VARCHAR2(1)
|
||||
, IS_REPLAYED -- VARCHAR2(1)
|
||||
, SERVICE_HASH -- NUMBER
|
||||
, PROGRAM -- VARCHAR2(48)
|
||||
, MODULE -- VARCHAR2(64)
|
||||
, ACTION -- VARCHAR2(64)
|
||||
, CLIENT_ID -- VARCHAR2(64)
|
||||
, MACHINE -- VARCHAR2(64)
|
||||
, PORT -- NUMBER
|
||||
, ECID -- VARCHAR2(64)
|
||||
, DBREPLAY_FILE_ID -- NUMBER
|
||||
, DBREPLAY_CALL_COUNTER -- NUMBER
|
||||
, TM_DELTA_TIME -- NUMBER
|
||||
, TM_DELTA_CPU_TIME -- NUMBER
|
||||
, TM_DELTA_DB_TIME -- NUMBER
|
||||
, DELTA_TIME -- NUMBER
|
||||
, DELTA_READ_IO_REQUESTS -- NUMBER
|
||||
, DELTA_WRITE_IO_REQUESTS -- NUMBER
|
||||
, DELTA_READ_IO_BYTES -- NUMBER
|
||||
, DELTA_WRITE_IO_BYTES -- NUMBER
|
||||
, DELTA_INTERCONNECT_IO_BYTES -- NUMBER
|
||||
, PGA_ALLOCATED -- NUMBER
|
||||
, TEMP_SPACE_ALLOCATED -- NUMBER
|
||||
FROM
|
||||
v$active_session_history a
|
||||
-- , dba_users u
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
/
|
||||
|
||||
GRANT SELECT ON t$ash TO public;
|
||||
CREATE PUBLIC SYNONYM t$ash FOR sys.t$ash;
|
||||
89
tpt/ash/daplanline.sql
Normal file
89
tpt/ash/daplanline.sql
Normal file
@@ -0,0 +1,89 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: daplanline.sql (v1.0)
|
||||
--
|
||||
-- Purpose: Report response time consumption data from DBA_HIST_ACTIVE_SESS_HISTORY
|
||||
-- by top SQL PLAN rowsource TYPE (not individual SQL)
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
--
|
||||
-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved.
|
||||
--
|
||||
-- Disclaimer: This script is provided "as is", no warranties nor guarantees are
|
||||
-- made. Use at your own risk :)
|
||||
--
|
||||
-- Usage: @daplanline SYSDATE-1 SYSDATE
|
||||
-- @daplanline DATE'2013-11-11' DATE'2013-11-12'
|
||||
-- @daplanline "TIMESTAMP'2013-11-11 10:00:00'" "TIMESTAMP'2013-11-11 15:00:00'"
|
||||
-- ^^^- note the double quotes around the timestamp syntax, needed due to spaces
|
||||
--
|
||||
-- Notes: This script runs on Oracle 11g+ and you should have the
|
||||
-- Diagnostics and Tuning pack licenses for using it as it queries
|
||||
-- some separately licensed views.
|
||||
--
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON
|
||||
|
||||
COL asqlmon_operation FOR a100
|
||||
COL asqlmon_predicates FOR a100 word_wrap
|
||||
COL options FOR a30
|
||||
|
||||
COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE
|
||||
COL asqlmon_sql_id HEAD SQL_ID NOPRINT
|
||||
COL asqlmon_sql_child HEAD CHILD# NOPRINT
|
||||
COL asqlmon_sample_time HEAD SAMPLE_HOUR
|
||||
COL projection FOR A520
|
||||
|
||||
COL pct_child HEAD "Activity %" FOR A8
|
||||
COL pct_child_vis HEAD "Visual" FOR A12
|
||||
|
||||
COL asqlmon_id HEAD "Line ID" FOR 9999
|
||||
COL asqlmon_parent_id HEAD "Parent" FOR 9999
|
||||
COL daplanline_plan_line FOR A60 HEAD "Plan Line"
|
||||
|
||||
BREAK ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation
|
||||
|
||||
WITH sq AS (
|
||||
SELECT
|
||||
-- to_char(ash.sample_time, 'YYYY-MM-DD HH24') sample_time
|
||||
count(*) samples
|
||||
, ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
FROM
|
||||
dba_hist_active_sess_history ash
|
||||
WHERE
|
||||
sample_time BETWEEN &1 AND &2
|
||||
AND snap_id IN (SELECT snap_id FROM dba_hist_snapshot WHERE begin_interval_time >= &1 AND end_interval_time <= &2)
|
||||
AND session_type = 'FOREGROUND'
|
||||
GROUP BY
|
||||
--to_char(ash.sample_time, 'YYYY-MM-DD HH24')
|
||||
ash.sql_plan_operation
|
||||
, ash.sql_plan_options
|
||||
, ash.session_state
|
||||
, ash.event
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
sq.samples * 10 seconds
|
||||
, LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER () * 100, 1), 999.9)||' %',8) pct_child
|
||||
, '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_child_vis
|
||||
--, sq.sample_time asqlmon_sample_time
|
||||
, sq.sql_plan_operation ||' '|| sq.sql_plan_options daplanline_plan_line
|
||||
, sq.session_state
|
||||
, sq.event
|
||||
FROM
|
||||
sq
|
||||
WHERE
|
||||
1=1
|
||||
ORDER BY
|
||||
--sq.sample_time
|
||||
seconds DESC
|
||||
)
|
||||
WHERE
|
||||
rownum <= 30
|
||||
/
|
||||
137
tpt/ash/dash_wait_chains.sql
Normal file
137
tpt/ash/dash_wait_chains.sql
Normal file
@@ -0,0 +1,137 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: dash_wait_chains.sql (v0.8)
|
||||
-- Purpose: Display ASH wait chains (multi-session wait signature, a session
|
||||
-- waiting for another session etc.)
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) https://tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @dash_wait_chains <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
-- @dash_wait_chains username||':'||program2||event2 session_type='FOREGROUND' sysdate-1 sysdate
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the DBA_HIST_ACTIVE_SESS_HISTORY view, use
|
||||
-- @ash_wait_chains.sql for accessiong the GV$ ASH view for realtime info
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL wait_chain FOR A300 WORD_WRAP
|
||||
COL "%This" FOR A6
|
||||
|
||||
PROMPT
|
||||
PROMPT -- Display ASH Wait Chain Signatures script v0.8 by Tanel Poder ( https://tanelpoder.com )
|
||||
|
||||
WITH
|
||||
bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat),
|
||||
ash AS (SELECT /*+ INLINE QB_NAME(ash) LEADING(a) USE_HASH(u) SWAP_JOIN_INPUTS(u) */
|
||||
a.*
|
||||
, o.*
|
||||
, SUBSTR(TO_CHAR(a.sample_time, 'YYYYMMDDHH24MISS'),1,13) sample_time_10s -- ASH dba_hist_ samples stored every 10sec
|
||||
, u.username
|
||||
, CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN
|
||||
REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n')
|
||||
ELSE
|
||||
'('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')'
|
||||
END || ' ' program2
|
||||
, NVL(a.event||CASE WHEN event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||NVL((SELECT class FROM bclass WHERE r = a.p3),'undo @bclass '||a.p3)||']' ELSE null END,'ON CPU')
|
||||
|| ' ' event2
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex
|
||||
, TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex
|
||||
, CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END
|
||||
||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name
|
||||
FROM
|
||||
dba_hist_active_sess_history a
|
||||
, dba_users u
|
||||
, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.current_obj# = o.object_id(+)
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
),
|
||||
ash_samples AS (SELECT /*+ INLINE */ DISTINCT sample_time_10s FROM ash),
|
||||
ash_data AS (SELECT /*+ INLINE */ * FROM ash),
|
||||
chains AS (
|
||||
SELECT /*+ INLINE */
|
||||
d.sample_time_10s ts
|
||||
, level lvl
|
||||
, session_id sid
|
||||
, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this
|
||||
--, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') path -- there's a reason why I'm doing this (ORA-30004 :)
|
||||
--, SYS_CONNECT_BY_PATH(&1, ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN '('||d.session_id||')' ELSE NULL END path
|
||||
--, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN ' [sid='||d.session_id||' seq#='||TO_CHAR(seq#)||']' ELSE NULL END path -- there's a reason why I'm doing this (ORA-30004 :)
|
||||
, CASE WHEN CONNECT_BY_ISLEAF = 1 THEN d.session_id ELSE NULL END sids
|
||||
, CONNECT_BY_ISLEAF isleaf
|
||||
, CONNECT_BY_ISCYCLE iscycle
|
||||
, d.*
|
||||
FROM
|
||||
ash_samples s
|
||||
, ash_data d
|
||||
WHERE
|
||||
s.sample_time_10s = d.sample_time_10s
|
||||
AND d.sample_time BETWEEN &3 AND &4
|
||||
CONNECT BY NOCYCLE
|
||||
( PRIOR d.blocking_session = d.session_id
|
||||
AND PRIOR s.sample_time_10s = d.sample_time_10s
|
||||
AND PRIOR d.blocking_inst_id = d.instance_number)
|
||||
START WITH &2
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This"
|
||||
, COUNT(*) * 10 seconds
|
||||
, ROUND(COUNT(*) * 10 / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS
|
||||
, path wait_chain
|
||||
, TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen
|
||||
, TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen
|
||||
, COUNT(DISTINCT sids) num_sids
|
||||
, MIN(sids)
|
||||
, MAX(sids)
|
||||
FROM
|
||||
chains
|
||||
WHERE
|
||||
isleaf = 1
|
||||
GROUP BY
|
||||
&1
|
||||
, path
|
||||
ORDER BY
|
||||
COUNT(*) DESC
|
||||
)
|
||||
WHERE
|
||||
rownum <= 30
|
||||
/
|
||||
|
||||
98
tpt/ash/dashpeak.sql
Normal file
98
tpt/ash/dashpeak.sql
Normal file
@@ -0,0 +1,98 @@
|
||||
-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: ashpeak.sql
|
||||
-- Purpose:
|
||||
--
|
||||
-- Author: Tanel Poder
|
||||
-- Copyright: (c) https://tanelpoder.com
|
||||
--
|
||||
-- Usage:
|
||||
-- @ashpeak <grouping_cols> <filters> <fromtime> <totime>
|
||||
--
|
||||
-- Example:
|
||||
--
|
||||
-- Other:
|
||||
-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use
|
||||
-- @dashpeak.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive
|
||||
--
|
||||
--------------------------------------------------------------------------------
|
||||
COL "%Total" FOR A7 JUST RIGHT
|
||||
--COL p1 FOR 99999999999999
|
||||
--COL p2 FOR 99999999999999
|
||||
--COL p3 FOR 99999999999999
|
||||
COL p1text FOR A30 word_wrap
|
||||
COL p2text FOR A30 word_wrap
|
||||
COL p3text FOR A30 word_wrap
|
||||
COL p1hex FOR A17
|
||||
COL p2hex FOR A17
|
||||
COL p3hex FOR A17
|
||||
COL dop FOR 99
|
||||
COL AAS FOR 9999999999.9
|
||||
COL log2_aas_4k FOR A14 HEAD "Log(2,AAS)" JUST LEFT
|
||||
COL totalseconds HEAD "Total|Seconds" FOR 99999999
|
||||
COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999
|
||||
COL event FOR A42 WORD_WRAP
|
||||
COL event2 FOR A42 WORD_WRAP
|
||||
COL time_model_name FOR A50 WORD_WRAP
|
||||
COL program2 FOR A40 TRUNCATE
|
||||
COL username FOR A20 wrap
|
||||
COL obj FOR A30
|
||||
COL objt FOR A50
|
||||
COL sql_opname FOR A20
|
||||
COL top_level_call_name FOR A30
|
||||
COL wait_class FOR A15
|
||||
|
||||
PROMPT
|
||||
PROMPT AAS by &1 within time range between &3 and &4
|
||||
|
||||
WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat)
|
||||
SELECT
|
||||
&1
|
||||
, COUNT(*) * 10 totalseconds
|
||||
, ROUND(COUNT(*) * 10 / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400, 1) AAS
|
||||
, LPAD(ROUND(RATIO_TO_REPORT(COUNT(*) * 10) OVER () * 100)||'%',5,' ') "%Total"
|
||||
, '|'||RPAD(NVL(RPAD('#', ROUND(LOG(2,COUNT(*) * 10 / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400), 1), '#'),' '), 12)||'|' log2_aas_4k
|
||||
FROM (
|
||||
SELECT
|
||||
TRUNC(sample_time, 'DD') dd
|
||||
, TRUNC(sample_time, 'HH') hh
|
||||
, TRUNC(sample_time, 'MI') mi
|
||||
, TO_DATE(SUBSTR(TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI'), 1, 15)||'0', 'YYYY-MM-DD HH24:MI') mt
|
||||
, CAST(sample_time AS DATE) ss
|
||||
, NVL(a.event, a.session_state)||
|
||||
CASE
|
||||
WHEN a.event like 'enq%' AND session_state = 'WAITING'
|
||||
THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']'
|
||||
WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#')
|
||||
THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass)
|
||||
THEN (SELECT class FROM bclass WHERE r = a.p3)
|
||||
ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual)
|
||||
END ||']'
|
||||
ELSE null
|
||||
END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU)
|
||||
, a.*
|
||||
, u.username
|
||||
, o.*
|
||||
FROM
|
||||
dba_hist_active_sess_history a
|
||||
, dba_users u
|
||||
, (SELECT
|
||||
object_id,data_object_id,owner,object_name,subobject_name,object_type
|
||||
, owner||'.'||object_name obj
|
||||
, owner||'.'||object_name||' ['||object_type||']' objt
|
||||
FROM dba_objects) o
|
||||
WHERE
|
||||
a.user_id = u.user_id (+)
|
||||
AND a.current_obj# = o.object_id(+)
|
||||
AND &2
|
||||
AND sample_time BETWEEN &3 AND &4
|
||||
)
|
||||
GROUP BY
|
||||
&1
|
||||
ORDER BY
|
||||
&1
|
||||
/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user