Oracle – Performance einer Query messen

Vielleicht möchte man wissen, warum eine Query so lang braucht. Vielleicht aber auch im vorraus, wie lang eine Query brauchen wird.

Hier kommt der Befehl Explain plan in Spiel.

Mit explain plan for SELECT * FROM TABLE_NAME wird ein Ausführungsplan für die Query SELECT * FROM TABLE erstellt.

Wie dieses Statement ausgeführt wird, erfährt man dann mit dem Statement select * from table(dbms_xplan.display);

Das Ergebnis einer komplexeren Query könnte dann folgendermaßen aussehen:
QUERY: select count(*) from TABLE where timestamp > to_date('2013/12/31', 'yyyy/mm/dd') and timestamp < sysdate-90 and processid not in (select processid from TABLE2 where timestamp > to_date('2013/12/31', 'yyyy/mm/dd'));*/

PLAN_TABLE_OUTPUT
————————————————————————————————————————————————————————————————————————————————————————————————————
Plan hash value: 1699373764

————————————————————————————————————–
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
————————————————————————————————————–
| 0 | SELECT STATEMENT | | 1 | 41 | | 20909 (1)| 00:03:51 |
| 1 | SORT AGGREGATE | | 1 | 41 | | | |
|* 2 | FILTER | | | | | | |
|* 3 | HASH JOIN ANTI | | 2117 | 86797 | 6624K| 20909 (1)| 00:03:51 |
|* 4 | VIEW | index$_join$_001 | 211K| 4135K| | 5826 (1)| 00:01:05 |
|* 5 | HASH JOIN | | | | | | |
|* 6 | INDEX RANGE SCAN | TABLE | 211K| 4135K| | 695 (1)| 00:00:08 |
| 7 | INDEX FAST FULL SCAN| SYS_C0036157 | 211K| 4135K| | 4496 (1)| 00:00:50 |
|* 8 | TABLE ACCESS FULL | TABLE2 | 1341K| 26M| | 12473 (1)| 00:02:18 |
————————————————————————————————————–

Predicate Information (identified by operation id):
—————————————————

2 – filter(TIMESTAMP‘ 2013-12-31 00:00:00′TIMESTAMP‘ 2013-12-31 00:00:00′)
5 – access(ROWID=ROWID)
6 – access(„TIMESTAMP“>TIMESTAMP‘ 2013-12-31 00:00:00′ AND „TIMESTAMP“TIMESTAMP‘ 2013-12-31 00:00:00′)

TO BE Continued

Veröffentlicht unter Allgemein, Oracle | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Oracle Quick Tipps

Anmelden:
Auf der Shell: ‚sqlplus‘ eingeben

Bei Nachfrage Benutzernamen und Passwort eingeben.
Für Administrative Tätigkeiten sind vielleicht erweiterte Berechtigungen notwendig.
Hier hilft bei der Eingabe „sys as sysdba“ als Benutzernamen.

Überprüfen des Status der Datenbank:
SQL>select status from v$instance;

Starten der Instanz:
SQL>STARTUP;

Herunterfahren der Instanz:
SQL> SHUTDOWN;

Für weitere Informationen zum Starten und Herunterfahren einer Oracleinstanz könnt Ihr hier weiterlesen:
http://docs.oracle.com/cd/B10501_01/server.920/a96521/start.htm

Tablespace erweitern:
ALTER TABLESPACE TABLESPACE_NAME ADD DATAFILE PFAD_ZUR_NEUEN_DATENDATEI SIZE GRÖSSE_DER_NEUEN_DATENDATEI
z.B:
ALTER TABLESPACE user_ts1 ADD DATAFILE 'c:\oracle\oradata\ora\userts1.dbf' SIZE 10M;

Pfad der Datendateien herausfinden:
SELECT NAME, FILE#, STATUS, CHECKPOINT_CHANGE# "CHECKPOINT" FROM V$DATAFILE;

Größe von Datafiles ermitteln:

select file_name, tablespace_name, bytes/1024/1024 as MB, autoextensible, online_status from dba_data_files order by tablespace_name;

Größe von Tabellen ermitteln (als Benutzer der Zugriff auf die Tabellen hat):
SELECT SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, BYTES/1024/1024 AS MB FROM USER_SEGMENTS order by MB desc WHERE SEGMENT_NAME = 'TESTTABLE';

SYS_LOB Elemente identifizieren:

SELECT owner, table_name, column_name
FROM dba_lobs
WHERE segment_name = 'SYSLOB_NAME'

Größe von Tablespaces ermitteln (als sysdba):

select
df.tablespace_name "Tablespace",
totalusedspace "Used MB",
(df.totalspace - tu.totalusedspace) "Free MB",
df.totalspace "Total MB",
round(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace)) "Pct. Free"
from
(select tablespace_name,round(sum(bytes) / 1048576) TotalSpace from dba_data_files group by tablespace_name) df,
(select round(sum(bytes)/(1024*1024)) totalusedspace, tablespace_name from dba_segments group by tablespace_name) tu
where df.tablespace_name = tu.tablespace_name ;

Tabellen im bestimmten Tabelspace (&TSNAME) von einem bestimmten Besitzer (&OWNER):


SELECT DISTINCT owner
, segment_name
, segment_type
, tablespace_name
, ROUND((BYTES/1024/1024), 2) AS table_size
FROM dba_segments
WHERE segment_type = 'TABLE'
AND tablespace_name = &TSNAME
AND segment_name not like ('BIN$%')
AND owner = &OWNER
GROUP BY owner
, segment_name
, segment_type
, tablespace_name
, ROUND((BYTES/1024/1024), 2)
ORDER BY table_size DESC

Spaltenbreite bei SQL Queries setzen:

column SPALTEN_NAME format a40

Veröffentlicht unter Oracle | Verschlagwortet mit | Hinterlasse einen Kommentar

Überflüssige Leerzeichen aus Skripten löschen (Netbeans)

Hallo,

schon mal überflüssige Leerzeichen im Code gehabt und keine Lust diese zeilenweise händisch zu entfernen?

Mit Netbeans geht das ganz einfach:

1. Dialog „Suchen und ersetzen“ aufrufen (STRG+H)
2. Suchen nach: \n\s*(\n)
3. Ersetzen mit: $1
4. Alle ersetzen

Das wars.

Viel Spass damit

Veröffentlicht unter Allgemein | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

Android Update 4.2 – Akku Laufzeit fix

Hallo,

heute mal was anderes. Wie bei vielen anderen, hat auch mein Nexus das 4.2 Android Update erhalten und auch bei mir verkürzte sich die Akkulaufzeit signifikant auf ein paar wenige Stunden.

Hier nun ein Tip, der zumindest bei mir funktioniert hat: Ich habe mich aus der Google Plus+ Anwendung abgemeldet.
Seit dem hält mein Akku wieder wie gewohnt lang.

Vielleicht klappts ja bei Euch auch.

Gruß
Sven

Veröffentlicht unter Smartphones und CO | Verschlagwortet mit , , , , , , , , , , , | Hinterlasse einen Kommentar

Dynamisches nachladen von CSS und Javascript Dateien mit Hilfe von ExtJS

Hallo,

heute habe ich mal was aus der ExtJS, Javascript und CSS Welt für Euch.

Falls Ihr mal Javascript oder CSS nachladen müsst, dann könnt Ihr das mit Hilfe des folgenden EXTJS Scriptes ganz einfach tun.
Fügt dies einfach an eine Stelle in Euer JS Script ein (Wir gehen hier mal davon aus, dass EXTJS korrekt geladen wird)

——————————————————————————————————————————————–
Ext.namespace('Ext.ux');

Ext.ux.Loader = Ext.apply({}, {
load: function(fileList, callback, scope, preserveOrder) {
var scope = scope || this,
head = document.getElementsByTagName("head")[0],
fragment = document.createDocumentFragment(),
numFiles = fileList.length,
loadedFiles = 0,
me = this;

//Hier wird eine dedizierte Datei von der Liste der Dateien heruntergeladen.
//Dies wird benötgt, wenn die Reihenfolge beachtet werden soll
var loadFileIndex = function(index) {
head.appendChild(
me.buildScriptTag(fileList[index], onFileLoaded)
);
};

/**
* Die CALLBACK Funktion - Sie wird einmal aufgerufen, wenn alle Dateien (nach der Letzten) geladen wurden.
*/
var onFileLoaded = function() {
loadedFiles ++;

//check ob dies die letzte Datei war, die geladen werden soll, wenn ja rufe die Callback Funktion auf - wenn nicht wird die nächste Datei geladen
if (numFiles == loadedFiles && typeof callback == 'function') {
callback.call(scope);
} else {
if (preserveOrder === true) {
loadFileIndex(loadedFiles);
}
}
};

if (preserveOrder === true) {
loadFileIndex.call(this, 0);
} else {
//Jede einzelne Datei laden
Ext.each(fileList, function(file, index) {
fragment.appendChild(
this.buildScriptTag(file, onFileLoaded)
);
}, this);

head.appendChild(fragment);
}
},

buildScriptTag: function(filename, callback) {
var exten = filename.substr(filename.lastIndexOf('.')+1);

if(exten=='js') {
var script = document.createElement('script');
script.type = "text/javascript";
script.src = filename;

//IE Sonderollen Handling
if(script.readyState) {
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = callback;
}
return script;
}
if(exten=='css') {
var style = document.createElement('link');
style.rel = 'stylesheet';
style.type = 'text/css';
style.href = filename;
callback();
return style;
}
}
});

———————————————————————————————————
Die Nutzung des Scriptes ist auf folgende Weise möglich:

var td = new Date();
Ext.ux.Loader.load([
'cssloadt1.js',
'cssloadt1.css'],
function() { // CALLBACK Funktion wenn alle Dateien erfolgreich geladen wurden
console.log('Dateien erfolgreich geladen: (Ladezeit: %dms)', td.getElapsed());
},
this // scope
);

Vielen Dank an mm_202 für sein Posting (http://www.sencha.com/forum/showthread.php?107796-Ext.ux.Loader-Load-js-css-Files-Dynamically)

Veröffentlicht unter Allgemein | Verschlagwortet mit , , , , , , , , , , , | Hinterlasse einen Kommentar

Oracle Limit

Hallo, diesmal ein kleiner Ausflug in die Oracle Welt.

Heute gehts darum, Pagin in eine Oracle Query ein zu bauen.

Hierzu verwendet man am besten die folgende Query:

SELECT * FROM (SELECT ROWNUM as rnr, TABLE.FIELD1, TABLENAME.FIELD2 FROM TABLENAME) WHERE rnr between START AND END

Wobei hier TABLENAME selbstredent durch den Tabellennamen ersetzt werden muss.
START ist der der OFFSET Wert bei dem die Ergebnisliste beginnen soll.
END der Endwert (Quasi Start + Limit aus der MySQL Welt)

Veröffentlicht unter Allgemein | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

Spotify auf Ubuntu installieren

Hallo Ihr Lieben,

heute zum Hype Thema Spotify – wie installiere ich Spotify auf einem Ubuntu System.

Ich habs aus irgendeinem Grunde nicht unter WINE ans laufen bekommen.
Naja, da habe ich diese tolle Anleitung gefunden die ich Euch nicht vorenthalten möchte:

http://www.halloubuntu.de/2012/03/spotify-unter-ubuntu-installieren-1214/

Vielen Dank an Hallo Ubuntu :-)

Veröffentlicht unter Linux | Verschlagwortet mit , , | Hinterlasse einen Kommentar

MSSQL – Limit

Hallo,

heute mal wieder was der Rubrik, warum einfach, wenns auch schwer geht.
Das heutige Problem ist das folgende:
In Mysql kann ich folgendes schreiben:
select * from TABLENAME limit 0,10
Dies würde mir die ersten 10 Zeilen der Tabelle TABLENAME zurückgeben.
select * from TABLENAME limit 10,10
Dies würde mir die nächsten 10 Zeilen, der Tabelle TABLENAME zurückgeben.

Leider gibt es etwas derartig feines einfaches in MSSQL nicht.

Nun sind wir im Internet immer wieder auf die folgende Lösung gestossen:

DECLARE @rowsperpage INT
DECLARE @start INT

SET @start = 0
SET @rowsperpage = 10

SELECT *
FROM (
SELECT row_number() OVER (ORDER BY SPALTENNAME_NACH_DEM_SORTIERT_WERDEN_SOLL) AS rownum, SPALTE_1, SPALTE_2,SPALTE_N
FROM TABLENAME
) AS A
WHERE A.rownum BETWEEN (@start) AND ((CASE WHEN @start > 0 THEN @start-1 ELSE @start END)+ @rowsperpage)

Dieses kleine Script gibt nun die ersten 10 Zeilen der nach „SPALTENNAME_NACH_DEM_SORTIERT_WERDEN_SOLL“ sortierten Tabelle zurück.

Viel Spass damit :-)

Veröffentlicht unter MSSQL | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

URL Parameter mittels jQuery auslesen/abfragen

Hallo,

heute mal wieder ein Tip zum Thema Javascript / Jquery.

Aufgabe: Wir wollen mittels Javascript/Jquery die Parameter einer URL sowohl alle (als Array), also auch einzeln (den Wert eines Parameters) abfragen.

Kurz gegoogelt bin ich auf folgendes schönes Snippet gestossen, welches ich Euch nicht vorenthalten möchte:


$.extend({
getUrlVars: function(){
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; }, getUrlVar: function(name){ return $.getUrlVars()[name]; } });

Vielen Dank an: UZBEKJON von (http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html)

Veröffentlicht unter Javascript, jquery | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

joms.jQuery.fn.qtip.timers is undefined Fehlermeldung

Hallo,

für diejenigen unter Euch, denen dieser Fehler auch mal unterkommt und keine Informationen dazu finden:

Umgebung: Joomla 1.7.3 mit JoomScocial 2.4.2 (AEC und Joomsocial Profile Types)

Bei Aufruf einer beliebigen Seite bricht der Firefox den Ladevorgang mit der Fehlermeldung:
„joms.jQuery.fn.qtip.timers is undefined“ ab.

Hotfix:
In der Datei: components/com_community/assets/script-1.2.js
Suchen nach:
try{clearTimeout(joms.jQuery.fn.qtip.timers.show);} catch(e){}

Ersetzen durch:
if(joms.jQuery.fn.qtip.timers!=undefined){
try{clearTimeout(joms.jQuery.fn.qtip.timers.show);} catch(e){}
}

Ich hoffe ich konnte Euch helfen.
Viel Spass beim Coden.
Gruß
Sven

Veröffentlicht unter Javascript, Joomla, JoomSocial, jquery | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar