Hal Apa Saja Yang Perlu di monitor pada SQL Server Anda ? – SQL Server counters –

Setelah SQLServer terinstall diproduction terkadang kita kebingungan apa saja yang perlu kita perhatikan, berikut beberapa hal yang perlu diperhatikan pada env SQL Server kita :

  1. General Statistics : Objek ini memonitor aktivitas umum pada server seperti jumlah koneksi user yang sekarang sedang terkoneksi dan jumlah user yang terkonek dan diskonek per detiknya. Biasanya jika terlihat jumlah user yang terkonek 500 kali lipat dari biasanya, maka waspadai penurunan dari performa sistem.

  2. Database : Objek ini memonitor hal – hal yang terjadi pada database, seperti operasi bulk copy, backup dan restore , dan aktivitas transaction log. Hal yang penting untuk dilihat adalah ukuran jumlah transaksi per detik, dengan melihat ini , kita dapat mengukur kemampuan server kita dalam menghadapi banyak transaksi sekaligus.

  3. Locks : Objek ini sangat penting dimonitor karena menggambarkan terjadinya kondisi yang dapat memperlambat kinerja sistem. beberapa jenis lock yang perlu diperhatikan antara lain :

(1) . Average Wait Time (ms) : rata – rata waktu tunggu dalam masa lock pada setiap transaksi
(2) . Lock Wait Time (ms) : Wait Time terakhir yang tercatat
(3) . Lock Wait per Seconds : Jumlah Lock per detik yang tidak dapat diselesaikan secepatnya
(4) . Number of Deadlock per Seconds : Jumlah Deadlock yang terjadi per detik

  1. Latch : Dalam melakukan Lock, SQL Server membutuhkan objek lain untuk mengontrol lock tersebut, hal itu disebut Latch . beberapa hal yang penting untuk dilihat adalah :

(1). Average Latch Wait Time (ms) : rata – rata Latch Wait Time
(2). Latch Wait / Sec : Lama Latch Time per detik pada Latch yang tidak dapat diselesaikan langsung.

5.  SQL Statistics :  Untuk mengetahui hal – hal yang berkaitan dengan SQL, biasanya dapat dilhat dari SQL Compliation per detik dan SQL Re Compilation per detik.

  1. Buffer Manager :  Untuk melihat penggunaan memory dari sqlserver , biasanya melihat Buffer cache Hit Ratio yang dapat melihat sebearapa banyak sqlserver menggunakan memory tanpa mencari dari disk. Hal ini sangat berpengaruh pada performa sqlserver.
  2. Plan Cache : Melihat seberapa efektif sqlserver menggunakan memory pada stored procedure , TSQL, Triggers. Hal ini dapat dilihat pada Cache Hit Ratio.

untuk lebih detail dapat anda lihat di sini

Mengaktifkan Page Compression pada Semua Tabel

Untuk data yang sangat besar, database bisa memanfaatkan fitur kompresi pada sqlserver untuk diaktifkan, hal itu berguna untuk mengurangi space dan meningkatkan performa (mengurangi IO cost).

bentuk – bentuk kompresi antara lain :

  1. Page Compression
  2. Row Compression

Banyak sumber mengatakan bahwa Page Compression lebih memberikan efek pada kompresi maupun pada performa.

sedangkan untuk object database yang dapat dilakukan kompresi adalah :

  1. Tabel
  2. Index

Untuk merubah satu buah tabel cukup mudah yaitu dengan cara :

ALTER TABLE {NAMA TABEL} REBUILD WITH (DATA_COMPRESSION=PAGE);

sedangkan untuk index seperti :

ALTER INDEX {NAMA INDEX} ON {NAMA TABEL} REBUILD WITH (DATA_COMPRESSION=PAGE);

namun masalah muncul saat kita sudah memiliki banyak tabel dan banyak index, tentu sangat melelahkan untuk melakukan script satu demi satu. Solusinya saya menemukan script yang mengenerate script untuk melakukan pengaktifan kompresi pada semua tabel dan pada semua index.

Untuk Semua Tabel :

SELECT 'ALTER TABLE ' + '[' + s.[name] + ']'+'.' + '[' + o.[name] + ']' + ' REBUILD WITH (DATA_COMPRESSION=PAGE);'
FROM sys.objects AS o WITH (NOLOCK)
INNER JOIN sys.indexes AS i WITH (NOLOCK)
ON o.[object_id] = i.[object_id]
INNER JOIN sys.schemas AS s WITH (NOLOCK)
ON o.[schema_id] = s.[schema_id]
INNER JOIN sys.dm_db_partition_stats AS ps WITH (NOLOCK)
ON i.[object_id] = ps.[object_id]
AND ps.[index_id] = i.[index_id]
WHERE o.[type] = 'U'
ORDER BY ps.[reserved_page_count]

Untuk Semua Index :

SELECT 'ALTER INDEX '+ '[' + i.[name] + ']' + ' ON ' + '[' + s.[name] + ']' + '.' + '[' + o.[name] + ']' + ' REBUILD WITH (DATA_COMPRESSION=PAGE);'
FROM sys.objects AS o WITH (NOLOCK)
INNER JOIN sys.indexes AS i WITH (NOLOCK)
ON o.[object_id] = i.[object_id]
INNER JOIN sys.schemas s WITH (NOLOCK)
ON o.[schema_id] = s.[schema_id]
INNER JOIN sys.dm_db_partition_stats AS ps WITH (NOLOCK)
ON i.[object_id] = ps.[object_id]
AND ps.[index_id] = i.[index_id]
WHERE o.type = 'U' AND i.[index_id] >0
ORDER BY ps.[reserved_page_count]

 

kedua script tersebut, tinggal dijalankan pada SQLServer Management Studio kesayangan anda, dan voilla! script yang didambakan akan muncul 😀

ok, semoga bermanfaat

Ringkasan Macam Bentuk Backup pada Oracle Database

Proses Backup salah satu proses yang penting pada Sistem Basis Data. Beribu alasan dapat dikemukakan mengapa backup ini sangat penting mulai dari sekedar memindahkan data sampai mengembalikan data yang hilang akibat kelalaian personal ataupun kesalahan sistem.

kali ini mari kita lihat opsi proses backup apa saja yang ada di salah satu database tersohor di dunia, yaitu Oracle . Opsi – opsi tersebut adalah :

Export

Opsi ini merupakan opsi logikal dari proses backup. Proses ini akan melakukan “copy” database object yang akan dilakukan export ke dalam bentuk propietary binary. Opsi ini cocok untuk proses backup yang dilakukan pada target objek database spesifik, misalnya pada satu atau beberapa tabel saja, walaupun opsi ini juga bisa dilakukan untuk keseluruhan objek dari database.  Model ini sangat mudah untuk dilakukan , sehingga banyak pengguna oracle menggunakan metode ini untuk melakukan backup.

Salah satu kekurangan dari model ini adalah adanya kemungkinan terjadi ketidakkonsistenan dari hasil backup, terutama jika tabel atau objek database yang dilakukan backup tidak mencantumkan table yang berelasi secara schema (foreign key constraint) maka akan ditemukan kesulitan saat melakukan restore karena pengencekan foreign key constraint tersebut. Model ini juga model backup yang termasuk lamban, dan tidak cocok untuk database dengan ukuran yang  besar, beberapa pengguna oracle mengatakan ukuran yang besar adalah > 50GB.

Contoh penggunaan :


exp scott/tiger file=emp.dmp log=emp.log tables=emp rows=yes indexes=no
exp scott/tiger file=emp.dmp tables=(emp,dept)

Data Pump (Export)

Model backup ini merupakan upgrade dari model sebelumnya. Model ini muncul pertama kali di database oracle 10G.

contoh penggunan

SQL> CREATE DIRECTORY dmpdir AS '/opt/oracle';
Directory created.

SQL> GRANT read, write ON DIRECTORY dmpdir TO scott;
Grant succeeded.

$ expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

Cold / Offline Backup

prinsipnya, cold backup ini dilakukan dengan cara mematikan database , lalu melakukan copy file database seperti *.dbf dan *.ora

Hot / Online Backup

hot backup ini merupakan kebalikan dari cold backup, dengan teknik teknik khusus , file database dapat dicopy walaupun database masih dalam kondisi online.

RMAN Backup

rman adalah utilitas khusus yang dibangun oleh oracle untuk kebutuhan backup dan restore database dengan lebih cepat dan lebih effisien, mendukung fitur – fitur khusus seperti incremental backup dan lain sebagainya.

  • catatan penting : konfigurasi penting dari database oracle adalah mode archivelog, konfigurasi ini menentukan jenis backup apa saja yang dapat dilakukan.

archivelog on :

  1. export
  2. offline backup
  3. online backup
  4. rman

archivelog off (noarchivelog) :

  1. export
  2. offline backup
  3. rman

 

sekian ringkasan kali ini…

Cara Cepat Menampilkan History Database Size

Seringkali, kita diminta secara mendadak untuk menampilkan history ukuran database dari waktu ke waktu,

idealnya kita harus menghitung ukuran per baris dari data yang ada. namun terdapat juga beberapa query yang dapat membantu kita tanpa melakukan hal tersebut , beberapa yang berhasil saya kumpulkan antara lain :

{ ORACLE } :


select to_char(creation_time, 'MM-RRRR') "Month", sum(bytes)/1024/1024/1024 "Growth in GB"
from sys.v_$datafile
where to_char(creation_time,'RRRR')='2014'
group by to_char(creation_time, 'MM-RRRR')
order by to_char(creation_time, 'MM-RRRR');

dengan query ini, kita akan mendapatkan ukuran database dari waktu ke waktu memanfaatkan v_$datafile , yang mana tentu syaratnya database anda belum di restart. jika sudah direstart maka v_$datafile pun akan kehilangan catatannya.

{SQL SERVER} :


SELECT
[database_name] AS "Database",
DATEPART(month,[backup_start_date]) AS "Month",
AVG([backup_size]/1024/1024) AS "Backup Size MB",
AVG([compressed_backup_size]/1024/1024) AS "Compressed Backup Size MB",
AVG([backup_size]/[compressed_backup_size]) AS "Compression Ratio"
FROM msdb.dbo.backupset
WHERE [database_name] = N'AdventureWorks'
AND [type] = 'D'
GROUP BY [database_name],DATEPART(mm,[backup_start_date]);

dengan query ini , kita memanfaatkan pencatatan backup yang dilakukan oleh SQL SERVER, tentunya ini hanya berlaku untuk database yang rutin di backup , jika tidak rutin ya wassalam.

ok sekian selamat berhitung

SQLServer Import Excel 2007 Error

setelah sekian lama, akhirnya saya mendapatkan error legendaris ini

Picture1

error ini muncul saat ingin mengimport excel 2017 ke sqlserver melalui SQLServer Import and Export Wizard

solusi yang dapat dilakukan adalah :

  1. menginstall https://www.microsoft.com/en-us/download/details.aspx?id=13255 , saya menggunakan yang versi 64 bit
  2. jika point 1 tidak berhasil , maka gunakan https://www.microsoft.com/en-us/download/confirmation.aspx?id=23734

saya pribadi banyak bisa setelah point 2 saya install saya baru berhasil menjalankan import excel 2017 dengan lancar sekali…

semoga membantu,

happy querying :p

Akses user SqlServer pada linked server

jika anda pernah mengalami kasus seperti :

image_thumb26

maka user yang anda pakai belum diberi grant untuk mengakses linked server ,

untuk mengatasi hal ini, diperlukan hanya 2 langkah saja :

Tambahkan user anda pada database master

USE [master]
GO
CREATE USER user_login_anda FOR LOGIN user_login_anda;

Tambahkan hak mengeksekusi linked server pada user

USE [master]
GO
GRANT EXECUTE ON SYS.XP_PROP_OLEDB_PROVIDER TO user_login_anda;

*jika anda menggunakan domain user maka user_login_anda menjadi [DOMAIN\user_login_anda]

ok itu saja, semoga banyak membantu 😀