Archive for the ‘Uncategorized’ Category

Oracle Function-Based Index

Mayıs 23, 2018

İlişkisel Veritabanı Yönetim Sistemleri (RDBMS) ‘nde veriler tablolarda tutulmaktadır ve tablolar arasında da Primary Key – Foreign Key kullanılarak ilişkiler tasarlanmaktadır. Kullanıcılar veritabanındaki tablolarda bulunan ilgilendikleri verileri SQL sorgularıvasıtasıyla çekmektedirler. Yazılan SQL sorgusuna bağlı olarak, kullanılan veritabanı yönetim sistemi optimizerı, veriye bütün tabloyu baştan sona tarayarak (table scan / full access) veya ilgili kolonlar üzerinde veriye erişimi hızlandırmak için oluşturulan index sayfalarını okuyarak (index seek / index scan) erişebilmektedir. Çoğu durumda index sayfalarının okunmasıyla veriye erişim çok daha hızlı gerçekleştirilmektedir. Bu sebeple veritabanı geliştiricileri veya veritabanı yöneticileri optimize etmek istedikleri sorguları inceleyerek belirli kolonlara indexler oluşturarak sorgu sürelerini azaltmayı hedeflemektedirler.

İndex oluşturulan kolonlar SQL sorgusunun WHERE kısmında yalın haliyle kullanıldığında (herhangi bir function veya expression içerisinde kullanılmadığında), ilgili sistemin optimizerı oluşturulan indexin sayfalarından okuma yaparak veriye hızlıca erişebilir. Ancak index oluşturulan kolonlar WHERE koşulu içerisinde yalın haliyle kullanılmayıp, örneğin bir fonksiyon içerisinde kullanıldıysa, ilgili optimizer veriye erişebilmek için var olan indexi kullanamaz hale gelir.

Genellikle veritabanı geliştiricilerinin başına gelen ve “Neden oluşturmuş olduğum index optimizer tarafından kullanılmıyor?” sorusunun muhtemel yanıtlarından birisi yukarıda bahsedilen durumdur. Oracle, böyle bir durumla karşılaştığınızda sizlere index oluşturulmak istenilen kolonu yalın haliyle indexleme imkanının yanında bir de kullanılan fonksiyon ile beraber ayrıca index oluşturma imkanını da sunmaktadır. Bu şekilde oluşturulan index türüne Oracle’da Function-Based İndex adı verilmektedir. Function-Based İndex‘ler vasıtasıyla tablolara ait kolonlar Oracle fonksiyonları ile beraber indexlenebilmektedir. Genel olarak anlattığımız konuyu bir de örnekle inceleyelim:

Aşağıda Oracle SQL Developer aracı kullanılarak bir SQL sorgusu çalıştırılmaktadır:

SELECT * FROM grade, student, instructor, zipcode

WHERE UPPER(grade_type_code) = ‘PJ’;

Yukarıdaki SQL sorgusunda course, instructor, zipcode ve grade tabloları cross joinolacak şekilde bağlanmış ve sorgunun WHERE filtresi kısmında grade_type_code değeri‘PJ’ olan kayıtlar getirilmek istenmiştir. Ancak ilgili tabloda tutulan değerlerin küçük/büyük harflerle birlikte tutulabileceği göz önüne alınarak grade_type_code kolonu UPPERfonksiyonu ile beraber kullanılarak her çeşit tutulabilen değerlerin getirilmesi garanti altına alınmıştır.

Bu şekilde oluşturulan bir sorgu için sadece grade_type_code kolonu üzerineDENEME_1 isminde bir index oluşturalım:

CREATE INDEX DENEME_1 ON GRADE (GRADE_TYPE_CODE);

Ardından sorgumuzun explain planını inceleyerek Oracle optimizerının DENEME_1ismindeki indexi kullanıp kullanmadığına bakalım:
0

Explain Plan çıktısından görülebileceği gibi Oracle optimizerı grade tablosunaDENEME_1 index sayfalarını okuyarak değil, FULL TABLE ACCESS yöntemini kullanarak bütün tabloyu baştan sona okumayı tercih etmiş gözüküyor. grade_type_codekolonunda index oluşturulmasına rağmen bu yöntemi seçmesi ve indexi kullanamamasının sebebi, grade_type_code kolonunun UPPER fonksiyonu içerisinde kullanılmış olmasıdır.

Bu durumda Oracle Function-Based İndex oluşturularak bu sorunun üstesinden gelinmesi sağlanabilir. Aynı sorguyu bir de aşağıdaki DENEME_2 isminde bir Function-Based Index oluşturarak çalıştıralım ve explain planını inceleyelim:

CREATE INDEX DENEME_2 ON GRADE (UPPER(GRADE_TYPE_CODE));

Şu an grade tablosundaki grade_type_code kolonu üzerinde hem DENEME_1 isminde bir normal index bulunmakta, hem de DENEME_2 isminde bir function based indexbulunmaktadır. Sorgunun tekrar çalıştırılmış ve explain planının oluşturulmuş hali aşağıdaki gibi olacaktır:

0 (1)

Görüldüğü gibi Oracle SQL optimizerı DENEME_2 ismindeki function-based indexikullanarak veriye erişmiş durumdadır. Aşağıda her iki durumda oluşturulan explain planların karşılaştırılması verilmiştir:

0 (2)

Oracle veritabanlarında kullanılan sorgular için funciton-based index oluşturulması görüldüğü gibi oldukça basit bir işlemden ibarettir. Normal bir index oluşturur gibi indexe bir isim verilmekte, hangi tablonun hangi kolonu üzerinde index oluşturulacağı belirtilmekte, farklı olarak sadece bu kolonu ilgili fonksiyon ismi ile beraber indexleneceği bilgisi verilmektedir. İşinize yaraması dileklerimle bir sonraki yazımızda görüşmek üzere…

Yazının orjinal haline aşağıdaki link üzerenden erişebilirsiniz;

http://www.abdullahaltintas.com/index.php/neden-oracle-olusturulan-indexi-kullanmiyor-oracle-function-based-index-olusturma/

Reklamlar

Ubuntu upgrade operation

Eylül 1, 2016

I tried this version: 15.10 to 16.04

cat /etc/apt/sources.list

1- sudo sed -i -e “s/wily/xenial/g” /etc/apt/sources.list

cat /etc/apt/sources.list

2- sudo apt-get update
3- sudo apt-get dist-upgrade

lsb_release -a

SQL Developer Setup Configuration

Kasım 30, 2015

…/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf

SetJavaHome ../../jdk

terminalde Jdk yı indirdiğiniz klasörün içerisine gelerek (teyit etmek için bulunduğunun klasörün icinde bin klasörü var ise doğru yerdesiniz) pwd komutunu yazıp enter a basarsanız o klasörün path ini vercecektir.

How to install Eclipse Resource Bundle Editor

Ekim 22, 2015

Update Site:

Create a new update site in Eclipse with the following:

Site name: ResourceBundle Editor
Site URL: https://raw.githubusercontent.com/essiembre/eclipse-rbe/master/eclipse-rbe-update-site/site.xml

Whitelabel Error Page

Haziran 24, 2015

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Jun 24 16:48:24 EEST 2015
There was an unexpected error (type=Not Found, status=404).
No message available

How to read Query Parameters key and value

Haziran 11, 2015

How to read Query Parameters key and value

javax.persistence.Query

Query query = ….
query.setParameter(“PARAM_1″,”1”)
.setParameter(“PARAM_2″,”2”)
.setParameter(“PARAM_3″,”3″)

…;
I want to get parameters and write Console. Like this;

System out ;

PARAM_1 – 1
PARAM_2 – 2
PARAM_3 – 3

ANSWER ;
java.util.Set<Parameter> params = query.getParameters();
for (Parameter p : params) {
String paramName = p.getName();
System.out.print(paramName + ” – “);
System.out.println(query.getParameterValue(paramName));
}

Target : http://stackoverflow.com/questions/28046207/how-to-read-query-parameters-key-and-value

Yonca Bilişim Teknolojilerine Yazılım Geliştirme Uzmanı Aranıyor !!!

Haziran 9, 2015

Yonca Bilişim Teknolojilerine Yazılım Geliştirme Uzmanı Aranıyor !!!

İlana aşağıdaki linkten ulaşabilirsiniz.

Yazılım Geliştirme Uzmanı Aranıyor
http://www.kariyer.net/yonca-bilisim-teknolojileri/yazilim-gelistirme-uzmani-is-ilani-i1384295/?&tmpsno=1&isaramalog=337894012&sirano=1&isaratipi=2

gVim

Mayıs 14, 2015

gVim

Begining of line – :%s/^/”/g
End of line – :%s/$/”+/g


..
.

Debiana Firebird kurulumu

Ocak 29, 2015

SELECT rdb$get_context(‘SYSTEM’, ‘ENGINE_VERSION’) from rdb$database;
FireBird DB versiyonunu verir.

1- root@fdurmus-nb:~# apt-get install firebird2.5-superclassic: SYSDBA yani admin parolasını oluşturmamızı isteyecek unutmayalm!!

[2- # dpkg-reconfigure firebird2.5-superclassic
[ Firebird otomatik olarak başlamasını istiyorsanız, paket üzerinde dpkg-reconfigure çalıştırın ve
[ Evet diyerek onaylayın. Sonra SYSDBA şifre tekrar istenir:
[

3- dpkg -L firebird2.5-classic-common : FireBird dosyalarının sistemde nereye kurulu olduğu bilgisini içerir.

TESTLER İÇİN HAZIR VERİTABANI OLUŞTURMAK İÇİN;
# apt-get install firebird2.5-examples firebird2.5-dev
# cd /usr/share/doc/firebird2.5-examples/examples/empbuild/
# chown firebird.firebird employee.fdb
# mv employee.fdb /var/lib/firebird/2.5/data/
# isql-fb
SQL> connect “localhost:/var/lib/firebird/2.5/data/employee.fdb” user ‘SYSDBA’ password ‘SYSDBApassword’;
[ PAROLAMIZI UNUTURSAK ULAŞABİLİRİZ. ]
[ /etc/firebird//SYSDBA.password ]
[ ISC_USER=sysdba ]
[ ISC_PASSWORD=”password” ]

artık sorgulama yapabiliriz ;

SQL> connect “localhost:/var/lib/firebird/2.5/data/employee.fdb” user ‘SYSDBA’ password ‘243a871e’;
Database: “localhost:/var/lib/firebird/2.5/data/employee.fdb”, User: SYSDBA
SQL> show tables;
COUNTRY CUSTOMER
DEPARTMENT EMPLOYEE
EMPLOYEE_PROJECT JOB
PROJECT PROJ_DEPT_BUDGET
SALARY_HISTORY SALES

Sorgulama için gui ortamı;
# apt-get install flamerobin

Sorgulama hatası ile ilgili;
“Statement failed, SQLCODE = -551 no permission for read-write access to database /var/lib/firebird/2.5/data/employee.fdb”

# chown firebird:firebird employee.fdb

How to compile c program in debian

Kasım 26, 2014

The program

/* hello.c */
#include
int main(int argc, char *argv[])
{
if (argc > 1)
printf(“Greetings %s.\n”, argv[1]);
else
printf(“Please tell me your name.\n”);
return 0;
}

Compile using:
> gcc -Wall -o hello hello.c
Run with:
> ./hello Linus
Greetings Linus.

gcc options

-o
output file name, (a.out if omitted)
-Wall
display warnings for many possible errors
hello.c
file to be compiled, can specify multiple .c files

The info pages (info gcc) has much more information about gcc. These are in the gcc-doc package.

Kayaklar:
http://luv.asn.au/overheads/compile.html