SQL Server Indonesia User Groups Community May 2009 - Posts - drowned in code

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

drowned in code

eat, sleep, breath, SQL

May 2009 - Posts

  • What Performance Tuning is All About

    Apakah Anda pernah mendengar tentang Travelling Salesman Problem? Sebuah cerita tentang bagaimana seorang salesman mencari rute terdekat untuk mendatangi beberapa kota dalam sekali kunjungan. Apakah Anda pernah mengalami masalah yang dialami si salesman? Saya selalu mengalaminya, setiap kali berangkat dari rumah ke kantor.

    Setiap beberapa hari saya akan mengubah rute perjalanan untuk mendapatkan rute paling dekat menuju kantor, mencatat kilometer yang saya tempuh, jumlah bensin yang saya dibutuhkan, kapan saya berangkat, dan waktu tempuh perjalanan. Dengan mencatat semua hal tadi, saya akan tahu rute mana yang harus ditempuh agar dapat tiba di kantor dengan cepat, dengan bensin yang irit, dan tidak terjebak macet.

    Saya selalu mengibaratkan Performance Tuning –terutama untuk SSIS- seperti mencari rute perjalanan dari rumah ke kantor. Untuk mendapatkan performance tercepat dan terefisien, saya harus mencoba melakukannya dengan beberapa cara. Apabila dalam mencari rute ke kantor saya harus mencatat jumlah bensin dan waktu tempuh, maka pada saat melakukan Performance Tuning saya mencatat berapa lama proses eksekusinya berlangsung, berapa % CPU yang digunakan, dan berapa besar memory yang dipakai. Hal ini dilakukan karena untuk setiap case biasanya membutuhkan solusi yang berbeda. Pun agar proses yang saya eksekusi dapat berjalan dengan cepat, dan tidak mengganggu proses lain yang sedang berjalan di server.

  • Algoritma Pertama Saya

    Seorang teman saya pernah meminta referensi mengenai buku Algorithma yang bagus. Awalnya saya bingung karena saya sendiri lupa-lupa ingat tentang buku algoritma yang dulu saya baca pas masa kuliah, ketambahan lagi pas dicari-cari bukunya gak ketemu.

    Yang paling saya ingat dari kuliah algoritma adalah algoritma pertama yang diajarkan oleh dosen saya. Beliau memberikan sebuah contoh yang sederhana, bagaimana menelpon dengan menggunakan telpon koin. Pada masa itu, di akhir tahun 90-an, telpon koin adalah salah satu barang yang paling dicari dan diminati, apalagi yang letaknya di pojok jalan dan agak jauh dari keramaian. Telpon ini banyak digunakan oleh para mahasiswa untuk menelpon gebetan atau pacar karena paling terjangkau, cukup dengan 500 atau 1000 rupiah bisa puas bertelpon ria. Duh jadi ngelantur gini. hehe.

    Kalo kita tulis, atau gambarkan, urutan menelpon itu seperti ini:

    1. Angkat gagang telpon
    2. Masukkan koin
    3. Tekan nomor telpon yang dituju
    4. Apabila nadanya sibuk, tutup telpon dan ambil kembali koin
    5. Jika tidak sibuk, tunggu hingga ada jawaban
    6. Jika ada jawaban, mulailah bertelpon hingga selesai, lalu tutup gagang telpon setelah selesai
    7. Jika tidak ada jawaban, tutup gagang telpon dan ambil kembali koin

    Kira-kira seperti itu urutannya, dan urutan langkah demi langkah tadi disebut algortima menelpon. Pada saat itu saya menyadari bahwa algoritma sebetulnya merupakan step-by-step yang harus kita lakukan pada saat ingin mengerjakan sesuatu. Dengan mengetahui step-by-step-nya, tentu proses pemecahan sebuah masalah, penulisan sebuah stored procedure, atau pembuatan sebuah SSIS package akan menjadi mudah. Dan dalam algoritma tidak ada cara yang benar dan salah apabila jawabannya benar. Yang ada adalah cara yang singkat/cepat dan cara yang berputar-putar. Itulah sebabnya pada saat interview kita sering diminta untuk menyelesaikan soal algoritma. Pada dasarnya si pewawancara ingin mengetahui cara berpikir orang yang diwawancara. Dan dengan mengetahui cara berpikir orang tersebut, akan dapat membantu si pewawancara menentukan apakah orang tersebut layak diterima bekerja atau tidak.

    Seperti yang dibilang orang bijak, Practice makes perfect. Tidak ada cara lain untuk mempelajari algoritma selain dengan banyak berlatih. Dengan banyak berlatih, dan melihat contoh algoritma yang sudah ada kita akan belajar membuat algoritma yang baik dan benar.

  • Conquering SQL Server, DB2 on x64 Box

    Sebuah project baru berarti sebuah tantangan baru. Yang saya *** dari pekerjaan sehari-hari saya adalah bahwa setiap project memiliki requirement berbeda. Bukan hanya dari business process-nya, tetapi technology/environment-nya juga.

    Beberapa waktu lalu saya mengerjakan sebuah project yang berhubungan dengan salah satu technology yang menjadi core di banyak company, yaitu DB2. Seperti sebuah project BI pada umumnya, data dari core system di exctract untuk kemudian ditransformasi dan di-load ke datawarehouse menggunakan SSIS. Untuk melakukan koneksi ke DB2, SQL Server memiliki sebuah OLEDB provider dengan nama DB2OLEDB yang terdapat pada Feature Pack-nya. Selain SQL Server, IBM sebagai vendor DB2 juga mengeluarkan OLEDDB provider untuk koneksi ke DB2. Berbeda dengan SQL Server yang menyediakan-nya online, OLEDB milik IBM hanya bisa kita dapatkan dari CD/DVD installer-nya saja. Dan yang harus menjadi perhatian adalah tidak semua versi DB2 memiliki OLEDB provider untuk machine x64.

    Dari practical side, provider bawaan IBM lebih mudah digunakan dibandingkan dengan yang dimiliki SQL Server. Dari performance side (belum sempat saya test), menurut pengalaman banyak orang di beberapa blog, konon hampir sama. Dari beberapa project terdahulu saya belajar bahwa provider milik vendor yang bersangkutan biasanya lebih cepat jika dibandingkan dengan provider yang dikeluarkan oleh Microsoft. Ini tentu hal yang lumrah karena vendor memiliki knowledge lebih dengan product-nya sendiri jika dibandingkan dengan Microsoft.

    Jadi, apabila Anda membutuhkan koneksi ke DB2 dari machine x64 dan memiliki OLEDB provider x64 untuk DB2 dari IBM sebaiknya gunakanlah provider tersebut. Jika tidak memilikinya, Anda selalu dapat mendownload dan menggunakan OLEDB yang dikeluarkan oleh SQL Server.

  • Melakukan Top-N di SSIS versi 2

    download sample code

    Apabila sebelumnya untuk melakukan Top-N saya membutuhkan Script Component dan Conditional Split, maka kali ini saya ingin menunjukkan cara yang lebih simple, dengan Script Component saja. Idenya sederhana, yaitu membuang row-row yang berada diluar top rows. Untuk melakukannya, dua keyword yang harus kita paham adalah ExclusionGroup dan DirectRow. Silakan baca SQL Server Books Online untuk keterangan lebih detil mengenai kedua keyword ini.

    Untuk mempersingkat step-by-step melakukannya, saya akan langsung ke bagian script component.

    Pada tab Script, tambahkan variable User::Top kedalam ReadOnlyVariables

    image

    Buka tab Inputs and Outputs, pilih Output 0, dan set property ExclusionGroup-nya dengan nilai 1.

    image

    Isi script component dengan script berikut

       1:      private Int32 nCounter=0;
       2:   
       3:      public override void ProcessInput(int InputID, Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer Buffer)
       4:      {
       5:          while (Buffer.NextRow())
       6:          {
       7:              if (nCounter < this.Variables.Top)
       8:              {
       9:                  nCounter++;
      10:                  Buffer.DirectRow(this.ComponentMetaData.OutputCollection[0].ID);
      11:              }
      12:          }
      13:      }

    Script diatas akan mengecek apakah input row yang sedang ditransformasi masih berada dalam top rows. Apabila row-nya masih berada dalam top rows, row tersebut akan dikirim ke output.

    Pada saat dieksekusi, hasil yang kita dapatkan akan sama dengan hasil pada blog sebelumnya, 20 data teratas.

    image

    Posted May 16 2009, 02:21 AM by si_hendrik with no comments
    Filed under:
  • Melakukan Top-N di SSIS

    download sample code

    Di T-SQL kita mengenal Top Clause untuk menampilkan data tertinggi, sebagai contoh untuk menampilkan sepuluh data tertinggi kita menggunakan select top 10 [columns_name] from [table_name]. Tapi bagaimana yah cara melakukan hal ini di SSIS? Misalnya kita telah melakukan transformasi data-data penjualan, lalu yang ingin diambil hanya sepuluh data penjualan terbanyak saja.

    Ada beberapa cara yang dapat dilakukan, salah satunya adalah dengan menggunakan dua component bawaan SSIS yaitu Script Component dan Conditional Split. Idenya sederhana, pertama dengan menggunakan script component kita tambahkan satu column yang diisi row number. Kemudian dengan Conditional Split kita pisahkan data yang row number-nya kurang dari atau sama dengan Top yang kita inginkan.

    Bingung kan? hehe… supaya gak bingung lagi saya akan membuat contoh dengan menggunakan data penjualan yang ada di AdventureWorks untuk mengambil top 20 data penjualan terbesar.

    Pertama buat satu variable di SSIS Package dengan nama Top dengan tipe data Int32 dengan value 20 dan variable RowCount dengan tipe data Int32.

    Lalu tambahkan Data Flow Task ke dalam control flow, tambahkan sebuah OLE DB Source di Data Flow Task yang mengambil PurchaseOrderID dan TotalDue dari table [Purchasing].[PurchaseOrderHeader] yang diurutkan berdasarkan TotalDue terbesar.

    image

    Kemudian tambahkan Script Component dengan menambahkan column ID di output column-nya

     image

    Isi script component dengan script berikut

        private Int32 nRowCount = 0;
    
        public override void Input0_ProcessInputRow(Input0Buffer Row)
        {
            nRowCount++;
            Row.ID = nRowCount;
        }

    Setelah selesai tambahkan Conditional Split, tambahkan criteria dengan nama TopRows dan Condition [ID] <= @[User::Top] untuk mem-filter row yang masuk ke dalam TopRows.

    image

    Tambahkan RowCount, lalu hubungkan output TopRows dari Conditional Split ke dalam RowCount. Isi property VariableName RowCount dengan User::RowCount.

    Pada saat dieksekusi, hanya 20 data teratas saja yang dihasilkan.

    image

More Posts
Powered by Community Server (Commercial Edition), by Telligent Systems