DAHSYATNYA PIKIRAN POSITIF

DAHSYATNYA PIKIRAN POSITIF
Berpikir positif adalah berpikir, menduga, dan berharap hanya yang baik tentang suatu keadaan atau tentang seseorang. Anda tidak akan berprasangka buruk tentang orang lain. Anda tidak menggunjingkan desas-desus yang buruk tentang orang lain. Anda tidak menduga-duga yang jahat tentang orang lain. Anda pun tak akan berprasangka buruk bahkan terhadap diri anda sendiri. Anda akan selalu merasa sehat, anda akan selalu yakin bahwa anda akan sukses, anda yakin anda akan disukai banyak orang.
Akibatnya, anda pun benar-benar akan selalu sehat, kesuksesan akan anda raih sebagai sebuah keniscayaan, dan banyak orang akan berkerumun di sekeliling anda karena mereka sangat menyukai pribadi anda. Bayangkan, bagaimana besar dampaknya bila anda setiap saat terlatih menggunakan pola pikir sedahsyat itu!
BIASAKAN DIRI BERPIKIRAN POSITIF DAN LIHATLAH APA YANG TERJADI

PERIKSALAH PIKIRAN ANDA
Hidup kita ditentukan oleh pikiran ~ Marcus Aurelius
Sel-sel di dalam tubuh anda akan menerjemahkan apa yang ada dalam pikiran bawah sadar anda ke dalam sebuah gerakan atau suatu mekanisme. Misalnya ketika pikiran bawah sadar anda sedang bersedih, maka sel-sel tubuh anda membentuk suatu mekanisme otomatis sehingga muncullah reaksi fisik pada tubuh anda, misalnya menangis. Sel-sel tubuh anda tidak bisa membedakan apakah anda betul-betul bersedih atau tidak. Misalnya anda bisa menangis hanya karena menonton sebuah film tragedi, padahal tragedi tersebut tidak menimpa anda.
Mekanisme otomatis di dalam tubuh anda juga bisa terlihat saat anda mengalami gerakan refleks. Saat tangan anda mengenai benda panas, maka secara otomatis tangan anda menjauh dari benda panas tersebut. Hal ini terjadi karena pikiran sadar anda mengatakan bahwa tidak enak dan bahaya jika menyentuh benda panas sehingga harus menjauhinya. Pikiran bawah sadar menerima perintah tersebut, dan seluruh sel di dalam tubuh selalu melakukan apa yang diperintahkannya.
Mekanisme otomatis ini akan terus bekerja untuk berbagai hal lainnya tergantung apa yang sudah anda programkan dalam pikiran bawah sadar anda melalui pikiran sadar anda. Sel-sel di dalam tubuh anda membentuk suatu mekanisme berdasarkan panduan atau perintah dari pikiran bawah sadar anda.
Pikiran anda harus terbiasa untuk selalu positif, dan anda akan lebih mudah mencapai cita-cita. Bukan Cuma itu, pikiran positif serta kepercayaan diri anda akan menarik orang lain bergabung dengan anda. Mereka tidak akan membiarkan anda berjalan sendiri menghadapi semua masalah. Justru dengan senang hati akan menemani dan membantu anda melewati semua kesulitan. Dan yang lebih penting, hidup anda akan menjadi lebih menyenangkan.
Hidup indah bukan berarti hidup penuh dengan kedamaian saja, tetapi hidup indah adalah hidup yang dipenuhi dengan keberhasilan. Bukankah keberhasilan itu sesuatu yang indah? Indah meliputi kedamaian dan keberhasilan, bukan kedamaian tetapi tanpa daya, sebab kedamaian tanpa daya bukanlah suatu keindahan.
Anda bisa memilih pikiran-pikiran positif saja di dalam kepala anda. Setelah memilih, anda harus memperkuat pikiran tersebut sehingga menjadi dominan. Jika tidak, maka pikiran-pikiran negatif akan mudah masuk ke dalam kepala anda dan akan mengendalikan hidup anda. Jika pikiran indah mendominasi pikiran anda maka hidup anda menjadi indah.
Sistem tubuh tidak memiliki kemampuan membedakan mana perintah yang baik atau tidak sehingga sistem tubuh akan menurut apa saja yang diperintahkan oleh pikiran itu. Oleh karena yang anda perlukan adalah pikiran anda harus memilih terlebih dahulu perintah yang akan diberikan kepada sistem tubuh anda.
Orang yang berpikiran negatif akan mencari sesuatu, baik orang, lingkungan, atau peristiwa sebagai pembenaran kesalahan atau tidak adanya tindakan yang diambil. Coba renungkan, berapa kali anda mencari kambing hitam atas kekurangan atau kegagalan yang anda lakukan? Renungkan dengan jujur, teliti dan tuliskan sebagai bahan pembelajaran. Kejujuran dan kesadaran anda akan menentukan keberhasilan anda selanjutnya. Mulai saat ini, berpikirlah secara positif.

HUKUM BERPIKIR POSITIF
Pada saat keluar rumah di pagi hari, kita sendirilah yang menentukan apakah hari itu akan jadi baik atau buruk, karena tergantung bagaimana kita menjalankan pikiran kita. Dapat tidaknya kita menikmati hari itu sangat tergantung pada cara kita berpikir ~ Stanley R. Welty, Presiden Wooster Brush Company
Jika anda bersikap ramah terhadap seseorang, maka orang itu akan ramah kepada anda. Jika anda memperlakukan anak anda sebagai anak yang cerdas, akhirnya ia betul-betul menjadi cerdas. Jika anda yakin bahwa upaya anda akan berhasil, maka besar sekali kemungkinan upaya anda dapat merupakan separuh keberhasilan. Nah, dampak pola berpikir positif itu disebut Dampak Pygmalion.
Pikiran anda sering kali mempunyai dampak ramalan tergenapi (fulfilling prophecy), baik positif maupun negatif. Kalau anda menganggap tetangga anda judes sehingga anda tidak mau bergaul dengannya, maka akhirnya ia betul-betul menjadi judes. Kalau anda mencurigai dan menganggap anak anda tidak jujur, akhirnya ia betul-betul menjadi tidak jujur. Kalau anda sudah putus asa dan merasa tidak sanggup pada awal suatu usaha, besar sekali kemungkinannya anda betul-betul akan gagal.
Pola pikir Pygmalion adalah berpikir, menduga, dan berharap hanya yang baik tentang suatu keadaan atau seseorang. Bayangkan, bagaimana besar dampaknya bila anda menggunakan pola pikir positif seperti itu. Anda tidak akan berprasangka buruk tentang orang lain. Anda tidak menggunjingkan desas-desus yang buruk tentang orang lain. Anda tidak menduga-duga yang jahat tentang orang lain.
Kalau anda berpikir buruk tentang orang lain, selalu ada saja bahan untuk menduga hal-hal yang buruk. Jika ada seorang kawan memberi hadiah kepada anda, jelas itu adalah perbuatan baik. Tetapi jika anda berpikir buruk, anda akan menjadi curiga, “Barangkali ia sedang mencoba membujuk”, atau anda mengomel, “Ah, hadiahnya cuma barang murah”.
Yang rugi dari pola pikir seperti itu adalah diri anda sendiri. Anda menjadi mudah curiga. Anda menjadi tidak bahagia. Sebaliknya, kalau anda berpikir positif, maka anda akan menikmati hadiah itu dengan rasa gembira dan syukur, “Ia begitu murah hati. Walaupun ia sibuk, ia ingat untuk memberi kepada saya”.
Hidup akan menjadi baik kalau anda memandangnya dari segi yang baik. Berpikir baiklah tentang diri sendiri. Berpikir baiklah tentang orang lain. Berpikir baiklah tentang keadaan. Berpikir baiklah tentang Tuhan.
Dampak berpikir baik seperti itu akan anda rasakan. Keluarga menjadi hangat. Kawan menjadi bisa dipercaya. Tetangga menjadi akrab. Pekerjaan menjadi menyenangkan. Dunia menjadi ramah. Hidup menjadi indah.
Pikiran kita bergetar dan memancarkan gelombang dengan suatu frekuensi. Besarnya frekuensi tergantung pada bentuk dan ukuran objek yang bergetar. Oleh karena itu frekuensi yang dikeluarkan oleh pikiran kita sesuai dengan apa yang dipikirkan oleh pikiran kita. Semakin kuat kita memikirkan sesuatu, maka semakin kuat getaran yang kita hasilkan. Getaran akan bergetar dengan frekuensi yang sama tetapi akan bergetar dengan amplitudo yang berbeda.
Getaran bisa menyebabkan suatu fenomena resonansi, yaitu menggetarkan objek lain yang memiliki suatu kesamaan. Jika kita memikirkan sesuatu maka akan lahir getaran yang sesuai dengan apa yang kita pikirkan, sehingga akan terrjadi resonansi dengan berbagai objek yang ada di alam yang memiliki suatu kesamaan (kemiripan) tertentu. Artinya, pikiran anda akan mengarah ke objek yang anda pikirkan dan sebaliknya objek pun akan mengarah ke diri anda, inilah yang disebut Hukum Tarik Menarik.
Jadi bisa disimpulkan bahwa pikiran kita bersifat magnetis dan memiliki frekuensi. Selama anda berpikir, pikiran-pikiran itu akan dikirim ke alam dan akan menarik semua hal yang memiliki kemiripan dengan pikiran kita. Inilah dasar dari konsep pikiran positif, yaitu jika kita berpikir positif maka semua hal yang positif akan menghampiri kita.
Alam semesta dengan segenap energi makrokosmosnya selalu bekerja mencari keseimbangan. Energi makrokosmos alam semesta tersebut selalu berhubungan dengan energi yang ada di setiap diri manusia yang sering disebut energi mikroskosmos. Proses ini tidak terlihat dan tidak terasa sehingga manusia cenderung mengabaikannya.
‘Berhutang’ pada alam semesta adalah bila seseorang berbuat hal yang buruk pada sesama atau pada alam. Misalnya dengan merugikan orang lain atau mengambil hak orang lain atau merusak alam, orang tersebut telah meminjam atau berhutang pada alam semesta.
Contoh konkret berhutang pada alam semesta yang sering terjadi adalah saat orang dengan sengaja mengambil sesuatu yang bukan haknya. Misalnya menerima kembalian lebih saat membayar di supermarket atau warung dan sengaja tidak mengembalikannya. Korupsi atau mengambil barang milik kantor sekecil apapun, atau diam saja sewaktu pelayan di rumah makan padang tidak menghitung semua makanan yang telah masuk perut.
Ini bukan rezeki, tetapi justru orang tersebut telah berhutang ke alam semesta karena dia telah mengambil yang bukan haknya. Suatu saat hutang ini akan diambil lagi dalam bentuk lain yang biasanya akan lebih merugikan. Dalam waktu sesaat, mencuri dan korupsi mungkin dapat membuat orang menjadi berlimpah uang, tetapi pencuri dan koruptor tidak akan pernah menjadi bahagia. Justru orang tersebut akan menjadi sengsara hidupnya.
Bila anda berbuat kebaikan, atau memberi uang sebisa anda kepada orang dimana orang tersebut tidak bisa membalas kebaikan anda, maka anda telah memancarkan energi baik dan kebaikan anda akan dibalas dengan kebaikan. Pancaran energi baik anda tersebut suatu saat akan dikembalikan oleh alam semesta dengan energi baik makrokosmosnya dalam bentuk kebaikan dengan jumlah yang lebih besar. Syaratnya adalah saat memberi kebaikan atau uang tidak boleh dibarengi dengan pamrih atau dengan maksud pamer. Pamrih dan pamer akan membuat energi baik anda tidak terpancar ke alam semesta.
Buatlah mendoakan kebaikan untuk orang atau melakukan kebaikan atau memberi uang sebisa anda pada orang yang memerlukan sebagai hal membahagiakan hati anda, tanpa pamrih.

APAKAH ANDA ORANG YANG BERPIKIR POSITIF?
Dengan pikiran, seseorang bisa menjadikan dunianya berbunga-bunga atau berduri-duri ~ Socrates
Apa yang anda alami hari ini adalah dampak dari pikiran anda kemarin. Apa yang akan anda alami esok hari adalah dampak dari pikiran anda hari ini. Pikiran yang sedang anda bayangkan saat ini sedang menciptakan kehidupan masa depan anda.
Anda berpikir bisa atau tidak bisa, dua-duanya akan benar. Bila anda berpikir bisa, maka anda bisa. Tetapi bila anda berpikir tidak bisa, maka anda tidak bisa.
Jika anda mengubah cara berpikir anda, kehidupan anda pun ikut berubah. Jika pikiran anda berubah ke arah positif maka kehidupan anda menuju arah yang positif. Sekali anda dapat merangkul sepenuhnya kekuatan pikiran anda, kekuatan itu akan mengubah cara anda menjalani kehidupan. Tak akan ada yang dapat menghentikan orang yang bermental positif untuk mencapai tujuannya. Sebaliknya, tak ada sesuatu pun di dunia ini yang dapat membantu seorang yang sudah bermental negatif.
Semua orang mempunyai potensi kekuatan pikiran. Tapi tak semua tahu dan mampu mengaktifkannya untuk mendapatkan manfaat yang luar biasa. Berpikir itu akan melahirkan pengetahuan, pemahaman, nilai, keyakinan dan prinsip.
Pikiran juga bisa menjadi penyebab penyakit kejiwaan dan fisik. Pikiran bahagia membuat anda bahagia, pikiran sengsara membuat anda sengsara. Pikiran takut membuat anda takut, dan pikiran berani membuat anda berani.
Anda mungkin tidak dapat mengendalikan keadaan, tapi anda dapat mengendalikan pikiran anda. Pikiran positif menghasilkan perbuatan dan hasil yang positif. Berpikir positif adalah sumber kekuatan dan sumber kebebasan karena ia membantu anda memikirkan solusi sampai mendapatkannya. Dengan begitu anda bertambah mahir, percaya, dan kuat. Disebut sumber kebebasan karena dengannya anda akan terbebas dari penderitaan dan kungkungan pikiran negatif serta pengaruhnya pada fisik.
Hidup yang anda jalani saat ini adalah pancaran pikiran, keputusan, dan pilihan anda. Jika anda rela menerima tantangan, berarti anda telah merintis perubahan, kemajuan, dan perkembangan. Anda hari ini adalah hasil keputusan anda kemarin. Anda esok hari ditentukan oleh keputusan anda hari ini.
Prinsip perkembangannya paling kuat terdapat dalam memilih. Anda bertanggungjawab atas pikiran anda sehingga anda harus bertanggungjawab atas semua perbuatan anda. Kenyataan adalah persepsi anda. Jika anda ingin mengubah kenyataan hidup anda, mulailah dengan mengubah persepsi anda.
Ciri apakah seseorang memiliki pikiran positif atau tidak adalah dari pencapaian dan tindakannya. Jika anda membiarkan pencapaian anda tetap saja tanpa peningkatan, maka anda belum berpikiran positif. Jika anda melakukan suatu tindakan yang salah terus menerus, anda juga belum berpikiran positif. Sedangkan ciri-ciri utama orang yang berpikiran negatif adalah mencari-cari alasan tidak melakukan sesuatu yang baik dan sesuatu yang tidak baik.
Dalam hal ini berpikir positif sendiri kerap mendapatkan kesulitan untuk dipraktekkan. Banyak orang yang mengetahui tentang konsep berpikir positif meski pemahamannya belum lengkap, tetapi mereka tidak memberikan perhatian yang cukup kepada pikirannya. Meskipun sudah mengenal berpikir positif, tetapi jika perhatian anda terhadap berpikir positif kurang, maka bisa saja anda tetap memiliki pikiran negatif.
Pemahaman anda tentang konsep berpikir positif juga masih kurang. Hanya tahu saja masih belum cukup. Anda tahu kalau terlalu banyak makan akan membuat badan anda gemuk, tetapi anehnya orang yang gemuk justru banyak makan, padahal dia tidak mau gemuk. Begitu juga anda mengenal atau mengetahui saja tentang berpikir positif tidaklah cukup. Anda tahu harus berpikir positif, tetapi tidak tahu caranya.

Berpikir Positif
Berpikir adalah kegiatan akal budi yang sangat aktif mengajukan berbagai pertanyaan dan kemudian meresponsnya dengan jawaban-jawaban. Hal itu bisa berupa penjelasan, pertimbangan, analisis, kesimpulan, bahkan sebuah keputusan. Ada yang berwujud ide, ada pula yang langsung berwujud kenyataan menjadi sebuah realitas. Keduanya disebut buah pikiran.
Ada dua jenis berpikir, yaitu: pertama, berpikir yang benar-benar berpikir sebagai suatu kegiatan akal budi (yang luhur). Kedua, berpikir dalam arti menghitung yang hanya berhenti pada aspek kuantitatif dari realitas.
Secara harfiah berpikir positif adalah kegiatan akal budi yang bermanfaat, yang mewujudkan suatu tindakan keputusan atau karya yang berguna tidak hanya untuk diri sendiri, tetapi juga bagi orang lain, dan kemaslahatan orang banyak. Hal tersebut adalah sesuatu yang tidak dapat dihitung secara kuantitatif.
Berpikir positif bukanlah suatu yang bekerja secara parsial dalam diri manusia karena berpikir positif hanya tercetus dari budi pekerti yang luhur. Melatih diri untuk berperilaku luhur adalah pekerjaan pertama yang harus dilakukan sebagai wadah dari berpikir positif.
Seseorang yang berbudi luhur adalah seseorang yang berpikir positif. Artinya, ia adalah seseorang yang senantiasa mempertimbangkan dan memandang setiap hal dari sisi positif, dari sisi baiknya, dari sisi manfaatnya yang lebih banyak dibanding sisi negatifnya.
Bagaimana cara menakar predikat positif?
Anda dapat melakukannya pada diri anda sendiri melalui pertanyaan: apakah anda sudah melakukan sesuatu yang berguna dan bermanfaat bagi kehidupan anda? Apakah anda sudah melakukan sesuatu yang sekecil apapun atau sesederhana apapun bentuknya, tetapi berguna dan bermanfaat bagi orang lain, sehingga hidup anda berguna tidak hanya diri sendiri tetapi juga bagi orang lain dan masyarakat yang lebih luas?
Semuanya harus berawal dari keikhlasan dan niat yang baik. Jika anda melakukannya hanya sebagai kedok semata-mata maka hal itu akan berbalik menjadi sesuatu yang negatif.
Semua dimensi kehidupan anda hendaknya diisi dengan unsur positif karena sesuatu yang positif adalah dinamika yang tidak pernah meninggalkan limbah yang terbuang dengan percuma. Berpikir positif akan menjadi sesuatu yang sangat aktif. Oleh karena itu perjumpaan atau pertemuan dengan orang lain selalu mendatangkan sesuatu yang berguna karena perjumpaan-perjumpaan dengan orang lain selalu berawal dari itikad yang baik dan senantiasa percaya bahwa dengan mendekati atau berjumpa dengan seseorang hanya akan bermanfaat jika sisi positif dari seseorang menjadi hal yang utama. Sikap semacam ini secara langsung akan menempatkan anda menyatu dengan lingkungan karena sikap dan perilaku anda ikut menjadikan lingkungan anda sejuk dan ramah.

Nilai-nilai Dasar Berpikir Positif
Pendidikan formal dan informal memegang peranan yang sangat penting dalam pembentukan kepribadian seseorang. Melalui pendidikan, seseorang dapat menumbuhkan benih-benih positif yang ada di dalam dirinya. Pendidikan juga memberi etika dan bekal moralitas kepada seseorang. Keduanya menjadi medium dan pendidikan merupakan faktor utama bagi kehidupan pribadi dan sosial. Namun demikian terdapat nilai-nilai dasar yang diperlukan untuk menguatkan berpikir positif di dalam diri anda.
1. Percaya kepada Tuhan Yang Maha Esa.
Anda harus menghargai seluruh hasil ciptaan Tuhan, termasuk di dalamnya menghargai orang lain dan menghargai diri sendiri, serta bersyukur atas segala yang telah anda peroleh dari-Nya.
2. Bersahabat dan menyingkirkan permusuhan.
Anda perlu melakukan segala hal secara damai dan tidak menggunakan cara-cara kekerasan. Dukunglah orang lain dan jangan menjatuhkannya. Bersemangatlah untuk mencari persamaan dan bukan mencari perbedaan.
3. Optimis memandang ke depan.
Anda harus berani menghadapi realitas dan berani menatap dunia sekeliling serta diri anda sendiri, memahami dan menghayati dengan konkret segala sesuatu seperti apa adanya.
4. Bersedia untuk selalu saling membantu.
Anda jangan segan untuk dimintai tolong oleh orang lain. Jangan segan pula untuk meminta tolong kepada orang lain. Nilai ini sangat diperlukan karena pada dasarnya manusia adalah mahluk sosial yang secara harfiah dalam hidupnya saling memerlukan bantuan dan isi mengisi, karena tidak ada seorang pun yang sempurna.
5. Gigih, rajin, dan pantang menyerah.
Orang yang gigih, rajin, dan pantang menyerah adalah orang yang memiliki daya imajinasi serta kreativitas yang tinggi.

Ciri-ciri Orang Yang Berpikir Positif
Berpikir positif bukan berarti tidak berhati-hati, keduanya bisa berjalan dalam waktu yang bersamaan tanpa melibatkan satu sama lain.
1. Melihat masalah sebagai tantangan.
2. Menikmati hidup.
3. Terbuka pada saran dan ide.
4. Buang pikiran negatif sesaat setelah terlintas.
5. Bersyukur.
6. Tidak mendengarkan rumor.
7. Segera bertindak.
8. Menggunakan bahasa positif.
9. Peduli pada citra diri.

MENGHINDARI PIKIRAN NEGATIF
Ukuran sukses sejati terletak pada kemampuan kita merasakan pikiran bahagia ~ Erbe Sentanu
Dalam buku “Terapi Berpikir Positif”, menyebutkan adanya tiga tindakan yang menimbulkan efek negatif. Ketiga tindakan berikut ini adalah tiga pembunuh utama karena efeknya mempengaruhi jiwa orang yang melakukannya ataupun orang yang lain:
1. Mencela, tindakan ini akan menghilangkan semangat untuk menghargai orang lain. Sesuatu yang dicela pastilah sesuatu yang dianggap buruk, dimana anggapan itu sangat gampang berubah, tergantung siapa, apa, dan bagaimana. Artinya, tindakan ini bersifat sangat subyektif.
2. Mengkritik, tindakan ini dapat menimbulkan rasa tidak berguna dan bisa memancing amarah. Melakukan kritik adalah hal yang tidak mudah karena ada banyak hal yang harus dipertimbangkan.
3. Membanding-bandingkan, menimbulkan rasa rendah diri, tidak puas, dengki, maupun sedih.

Pikiran negatif menjadikan bahasa seseorang menjadi negatif dan yang terdengar hanya keluhan. Hal itu membuat orang-orang yang berpikir positif tidak tertarik untuk berinteraksi dengannya. Orang yang berpikir positif memiliki pola pikir berorientasi solusi, maju, dan berkembang. Sedangkan orang yang berpikir negatif hanya berkutat pada problem, hingga menular kepada orang lain.
Pikiran negatif membuat seseorang merasa senang pada orang yang mendukung pendapat negatifnya dan orang yang sejenis yang memiliki pikiran sejenis dengannya. Jadi, pikiran negatif melahirkan persahabatan yang negatif.
Persahabatan negatif memperkuat pikiran negatif. Dengan begitu orang tersebut hidup dalam rotasi negatif. Permasalahan yang dihadapi pun semakin membesar dan hidupnya semakin tidak terarah.

Pola Pikir Negatif
Betapa sering kita terbelenggu oleh jebakan pikiran negatif. Selalu saja ada suara-suara yang menahan diri kita untuk melakukan perubahan yang lebih baik. Seolah kondisi yang kita alami saat ini merupakan warisan atau bahkan takdir yang tak akan pernah bisa berubah. Bila saat ini hidup kita pas-pasan, maka selamanya begitulah. Apakah betul begitu?
Pengalaman buruk menjadi pemicu kuat pikiran negatif tetap tertahan dalam pikiran. Bila anda tak bisa mendobrak pengalaman buruk itu, bisa jadi bukan saja pikiran negatif tak akan pernah hengkang dari pikiran, tapi bahkan akan terus bertahan dan kekal selamanya di dalam diri anda.
Jika anda terus menjaga pikiran negatif di dalam tubuh anda, maka tubuh anda akan terbiasa untuk membutuhkannya. Akibatnya, segala hal akan mudah anda lihat dari kacamata negatif.

Ciri-ciri Orang yang Berpikir Negatif:
1. Rendah diri.
2. Ketidaktahuan.
3. Generalisasi.
4. Salah persepsi.
5. Menganggap masalah secara permanen.
6. Mempertahankan status quo.
7. Obyek pikiran negatif.
8. Realitas.
9. Saya tidak bisa.
10. Alasan tersembunyi.

Mencegah dan Mengatasi Pikiran Negatif
Jika anda berpikir negatif, terutama ketika terjadi hal di luar rencana, maka anda dengan mudah akan merasa depresi dan tidak bisa melihat sisi baik dari kejadian tersebut. Berpikiran negatif tidak membawa kemana-mana, kecuali membawa perasaan tambah buruk yang akan berakibat performa anda mengecewakan. Hal ini akan bisa menjadi seperti lingkaran yang tidak berujung.
Jessica Padykula menyarankan teknik untuk mencegah dan mengatasi pikiran negatif:
1. Hidup di saat ini.
2. Katakan hal positif pada diri sendiri.
3. Percaya pada kekuatan pikiran positif.
4. Jangan berdiam diri.
5. Fokus pada hal-hal positif.
6. Bergeraklah (olah raga).
7. Hadapi rasa takut anda.
8. Cobalah hal-hal baru.
9. Ubah cara pandang.
10. Berpikirlah secara positif.
11. Gunakan self-affirmation.

Memupuk Rasa Percaya Diri
Rasa percaya diri yang overdosis bukanlah gambaran kondisi kejiwaan yang sehat karena hal tersebut merupakan rasa percaya diri yang bersifat semu.
Untuk menumbuhkan rasa percaya diri yang proporsional maka anda harus memulainya dari dalam diri sendiri. Hal ini sangat penting mengingat bahwa hanya anda yang dapat mengatasi rasa kurang percaya diri yang sedang anda alami.
Disarankan jika anda sedang mengalami krisis kepercayaan diri:
1. Evaluasi diri secara obyektif.
2. Beri pengharapan yang jujur terhadap diri sendiri.
3. Berani mengambil resiko.
4. Mensyukuri dan menikmati karunia Tuhan.
5. Menetapkan tujuan yang realistis.

Membangun Optimisme Membumi
Dalam kehidupan sehari-hari sering sekali kita menemui orang-orang yang memiliki optimisme begitu tinggi untuk meraih suatu prestasi tertentu dan cenderung menganggap enteng segala tantangan yang mungkin menghadang. Namun demikian, dibalik sikap optimisme tersebut tidak jarang kita juga menemukan bahwa orang tersebut cenderung tidak memiliki dasar atau landasan kuat untuk mendukung optimismenya yang terefleksi dalam bentuk minimnya persiapan dan rencana, ketekunan, kerja keras, dana kemampuan yang dimiliki. Akibatnya, ia tidak pernah berhasil mencapai prestasi yang tadinya sangat diyakini akan dapat dicapai. Bahkan banyak yang berakhir dengan kekecewaan dan frustrasi mendalam.
Anda selamanya tidak bisa melepaskan diri dari keterikatan waktu. Masa lalu telah menjadi sejarah. Hal itu memberi banyak pelajaran tentang suatu hal yang membedakan tetapi jangan sampai anda hidup di dalamnya dan terlilit belenggunya.
Masa depan masih berupa wilayah yang penuh misteri dan keajaiban. Sedangkan masa lalu adalah peta tentang dari mana anda dan masa depan merupakan wilayah tentang kemana anda. Maka tugas anda adalah menggoreskan pena imajinasi tentang masa depan di atas kertas sejarah masa lalu.
Optimisme akan masa depan tidak dibangun di atas harapan utopis atau impian kosong karena harapan. Impian seperti itu bersifat gratis dan bisa dimiliki oleh semua orang dalam jumlah sebanyak mungkin. Kalau hanya bicara harapan dan impian, tentu semua orang ingin makmur, hidup enak, berfoya-foya, terhormat, dan digolongkan ahli sorga. Namun dalam kenyataan berapa persen yang bisa mewujudkan impian tersebut?
Bagaimana cara membangun optimisme yang membumi?
1. Keyakinan.
Keyakinan seperti apa yang dibutuhkan saat anda mendesain masa depan? Anda membutuhkan keyakinan faktual sebagai alasan mengapa anda memiliki optimisme yang kuat.
Berilah diri anda alasan yang kuat mengapa anda pantas memiliki keyakinan tentang suatu hal. Batas anda untuk yakin dan ragu-ragu terkadang lebih sering berupa batas kemampuan anda untuk mengetahui bagaimana sesuatu terjadi (how something happens).
Selain keyakinan faktual, anda membutuhkan keyakinan mental, terutama ketika anda sedang menghadapi pekerjaan yang sifatnya start-up.
Bagaimana orang lain memberlakukan anda diawali dari bagaimana anda memberlakukan diri anda. Jika anda tidak yakin bahwa anda memiliki kemampuan untuk bermain secara utuh, maka karakter hidup yang anda peragakan adalah karakter ragu-ragu untuk sukses.
Keyakinan bahwa anda memiliki kemampuan meraih sukses melahirkan pribadi yang puas terhadap kehidupan dan oleh karena itu energi yang dihasilkan bersifat positif. Energi inilah yang akan melindungi keyakinan anda dari virus yang berupa keragu-raguan, rasa tidak berdaya, pesimisme tidak beralasan, rasa khawatir yang berlebihan terhadap takhayul ‘jangan-jangan’ yang menyebabkan anda terseret dari garis fokus hidup anda.
2. Kontrol diri.
Kontrol diri erat kaitannya dengan bagaimana anda menggunakan pilihan hidup. Disadari atau tidak, anda selama hidup selalu disodorkan sejumlah pilihan seiring dengan detak jantung anda. Mana yang akan anda pilih, anda jengkel karena keadaan semrawut atau karena anda jengkel sehingga keadaan menjadi semrawut.
Pilihan seluruhnya di tangan anda. Anda berpikir negatif karena keadaan yang negatif atau karena anda berpikir negatif sehingga keadaan menjadi negatif. Terus terang sebagai manusia biasa terkadang anda sering tergelincir ke dalam situasi hidup bahwa realitas adalah monster yang memberi anda kepastian sehingga di hadapannya anda tidak sempat menyadari bahwa realitas adalah hasil pilihan anda.
Ketika kontrol diri tidak lagi berada pada kesadaran bahwa realitas adalah hasil dari akumulasi pilihan, maka optimisme mulai meninggalkan anda karena energi yang bekerja membentuk format hidup anda berupa energi negatif. Saat itulah anda tergoda untuk memilih keyakinan bahwa lebih besar tentangan ketimbang kemampuan; lebih banyak problem ketimbang solusi; hutang melebihi jumlah pemasukan; keterbatasan lebih berkuasa ketimbang keunggulan anda; dan semua yang anda lakukan pantas dianggap kenihilan belaka.
3. Kohesi.
Lingkungan memiliki energi, roh, atau kekuatan untuk membentuk anda meskipun akhirnya keputusan tetap di tangan anda. Lingkungan bagaikan penasihat tanpa jabatan. Sayangnya, anda secara alami cenderung terbawa larut oleh lingkungan tanpa keputusan yang kuat untuk menciptakan seleksi. Akibatnya, anda menjadi sosok yang diciptakan oleh lingkungan sehingga jadilah anda sosok yang biasa-biasa saja dan tidak pernah menempati wilayah posisi pengambil keputusan meskipun untuk persoalan anda sebagai manusia.
Tidak semua energi yang dikeluarkan lingkungan memiliki daya tarik ke hal-hal negatif, tetapi kesalahan tentang lingkungan terjadi ketika anda mengabaikan prinsip dasar kebenaran alamiah bahwa dunia ini diciptakan dari hukum kerja sama. Jika anda hanya memiliki satu lingkungan yang sangat terbatas, maka lingkungan itulah yang menjadi identitas anda. Ibaratnya, seperti katak di dalam tempurung. Padahal satu gagasan hidup menuntut aplikasi sekian perangkat dimana masing-masing perangkat ikut andil sesuai kekuatannya.

MELEJITKAN SUGESTI POSITIF
Semua bunga esok hari ada dalam benih hari ini. Semua hasil esok hari ada dalam pikiran hari ini ~ Aristoteles
Kalimat apa yang sering anda keluarkan dari mulut anda? Seberapa sering anda mengatakannya? Itu semua sangat mempengaruhi hidup anda dari waktu ke waktu. Kata-kata adalah awal pembentukan sugesti pada diri anda. Dan dari sugesti itulah dapat terbentuk diri anda seperti sekarang ini.
Sugesti merupakan rangkaian kata maupun kalimat yang diberikan kepada seseorang untuk memberikan pengaruh sesuai dengan makna yang ditangkap dari penyampaian kalimat tersebut. Jadi, hal terpenting dari penanaman sugesti adalah dari kata-kata yang anda sampaikan: apa, kapan, dan sesering apa anda menyampaikannya.

Formula Berpikir Positif
Ubahlah cara berpikir anda, maka anda akan dapat mengubah kehidupan anda, begitu kata pepatah. Pepatah ini juga sudah banyak dijadikan judul buku dan judul artikel. Nah, jika anda ingin memiliki kehidupan yang sukses dan berbahagia, berpikirlah sukses dan bahagia. Intinya, berpikirlah positif.
Kita perlu berpikir positif agar mendapatkan hasil yang positif.
Formula rahasia berpikir positif:
1. Melihat positif.
2. Berbicara positif.
3. Mendengar positif.
4. Bertindak positif.
5. Berpikir kreatif.
6. Self-talk.
7. Biasa menjadi luar biasa.
8. Melihat ke depan.
9. Berpikir mungkin.

Memperkuat Sugesti Anda
Walau sugesti yang anda katakan terasa tidak nyata bagi anda sekarang, tidaklah mengapa, karena pikiran sadar anda melihat bahwa hal yang anda katakan itu sedang tidak ada pada diri anda sekarang. Tetapi ketika semakin sering anda mengatakan sugesti yang anda bentuk itu, lama kelamaan hal itu akan menjadi suatu kebiasaan bagi diri anda, dan lambat laun anda akan meyakini sugesti yang sering anda ucapkan. Ingat, kuncinya selalu di sini adalah emosi atau perasaan anda.
Pikiran bawah sadar anda akan memerintahkan pikiran sadar anda untuk melakukan segala sesuatu yang perlu dilakukannya. Dan segala sesuatu yang anda lakukan akan selalu tertuju pada apa yang telah anda sugestikan. Segala sesuatu dan solusi di sekeliling anda yang tadinya tidak terlihat akan menunjukkan dirinya untuk ikut membantu dan mewujudkan apa yang anda inginkan. Segalanya akan terasa begitu mudah dan menyenangkan untuk dilakukan.

TERAPI BERPIKIR POSITIF
Tak akan ada yang dapat menghentikan orang yang bermental positif untuk mencapai tujuannya. Sebaliknya, tak ada sesuatu pun di dunia ini yang dapat membantu seseorang yang sudah bermental negatif ~ W.W. Ziege
Hidup yang anda jalani saat ini adalah pancaran pikiran, keputusan, dan pilihan anda. Jika anda rela menerima tantangan berarti anda telah merintis perubahan, kemajuan, dan perkembangan. Ada tiga kekuatan yang menjadi sumber keseimbangan dan berpikir positif dalam hidup. Jika salah satu tidak ada, maka anda akan mudah berpikir negatif. Tiga kekuatan ini terdiri dari: keputusan, pilihan, dan tanggung jawab. Ketiganya tidak bisa dipisahkan. Jika dipisahkan maka akan terjadi ketidakseimbangan yang mengundang frustrasi sehingga anda akan mencela, mengkritik, dan membanding-bandingkan.
Konsentrasi dan pikiran anda menjadi negatif dan akan melahirkan perasaan dan kenyataan hidup yang negatif. Pada dasarnya sebagian besar orang memilih pikiran, konsentrasi, dan perilakunya. Setiap keputusan yang diambil adalah hasil pilihannya. Persoalannya terletak pada keberanian bertanggungjawab. Bisa jadi seseorang menyadari dirinya sengsara, tapi tidak tahu bahwa kesengsaraannya merupakan hasil pikiran dan pilihannya sendiri hingga ia tidak merasa harus bertanggungjawab. Itu sebabnya ia akan mencela orang lain berdasarkan perasaannya, membanding-bandingkan dirinya dengan orang lain, dan menyalahkan nasibnya.
Pengetahuan adalah kekuatan. Pengetahuan anda tentang apa yang terjadi di dalam diri akan membantu anda untuk melakukan perubahan dan kemajuan di jalan yang benar. Anda tidak akan menjadi mangsa perasaan negatif yang mengganggu perasaan jiwa dan raga.

Teknik Berpikir Optimis
Pikiran positif akan membawa kita pada keberhasilan. Pikiran positif itu antara lain selalu berkata “saya bisa” dan “saya akan”. Kata-kata ini adalah refleksi dari pikiran positif yang tidak menyerah pada keadaan, apa pun keadaan yang anda lalui.
DR. Edward Banfield, sosiolog dari Harvard University menggambarkan satu faktor penting seseorang dalam meraih kesuksesan. Dia menemukan bahwa faktor utama yang menyebabkan seseorang sukses adalah sikap tertentu yang ada dalam pikiran orang tersebut.
Sikap itu adalah perspektif jangka panjang. Artinya, seseorang yang sukses dalam berencana dan bertindak selalu memiliki perspektif jangka panjang. Setiap keputusan yang dibuat selalu memperhatikan akibatnya bagi masa depan dalam jangka panjang. Tidak ada istilah bagi mereka yang berbunyi ‘bagaimana nanti saja’, mereka lebih berpikir “nanti bagaimana?”
Berpikir jauh ke depan bukan berarti mengkhawatirkan masa depan, tetapi lebih pada mempersiapkan masa depan. Segala keputusan, rencana, dan tindakan akan dipertimbangkan dampaknya di masa depan. Apakah keputusan anda saat ini akan membawa dampak positif bagi masa depan anda? Apakah rencana anda mendukung visi anda? Apakah tindakan anda akan mempengaruhi masa depan anda?
Satu-satunya cara untuk membentuk perspektif jangka panjang ini adalah dengan merumuskan visi anda saat ini. Jangan abaikan dengan langkah sukses ini. Jangan takut untuk gagal, lebih baik anda gagal meraih visi yang luar biasa daripada berhasil tidak meraih apapun.
Jika anda berpikir bahwa penampilan maupun kemampuan anda berada di bawah orang lain, maka sikap anda akan minder. Jika pikiran anda mengatakan bahwa anda memiliki potensi yang sama dengan orang lain, maka anda akan percaya diri. Ini adalah salah satu keajaiban pikiran yang akan membentuk karakter. Karakter akan terbentuk pada diri kita sesuai dengan apa yang kita pikirkan tentang diri kita.
Jika anda berpikir bahwa kegagalan itu memalukan dan kegagalan adalah akhir segalanya, maka anda akan merasa ketakutan saat melakukan sesuatu. Lain lagi jika berpikir bahwa gagal adalah suatu pembelajaran dan menganggap masih ada kesempatan lain, maka anda akan menjadi orang yang berani.
Sikap pesimis disebabkan oleh pikiran bahwa diri anda tidak memiliki kemampuan. Sikap pesimis juga karena anda merasa sudah ditakdirkan miskin dan keadaan di sekeliling anda tidak mendukung. Sebaliknya, sikap optimis muncul karena pikiran anda mengatakan bahwa segala sesuatu bisa dipelajari, siapa tahu besok lusa Tuhan akan memberi rezeki, dan bagaimana pun keadaannya masih ada yang bisa sukses, termasuk diri anda. Bagaimana anda berpikir akan menentukan apakah anda orang yang optimis atau pesimis.
Saat kita berdiri, kita melihat dunia ini tegak semua. Saat kita berbaring, kita melihat dunia ini miring semua. Saat kita berdiri dengan dua tangan dan kaki di atas, kita melihat dunia ini terbalik. Saat mata kita terpejam seakan dunia ini tidak ada. Saat kita pusing kita melihat dunia ini oleng. Dunia terlihat sesuai dengan kondisi kita, padahal tidak ada perubahan pada dunia tersebut.
Itulah gambaran dari sikap kita. Kita memandang sesuatu tergantung pada sikap yang kita miliki. Jika sikap kita positif, maka kita melihat segala sesuatu dengan positif. Sebaliknya, jika sikap kita negatif, maka kita melihat segala sesuatu dengan negatif. Sikap memang sangat berpengaruh terhadap kehidupan kita karena mempengaruhi cara pandang kita terhadap dunia.
Sikap adalah cara pandang atau berpikir kita terhadap sesuatu. Sikap juga menjadi penentu tindakan dan saringan terhadap tindakan-tindakan kita. Jadi, sikap sangat berpengaruh dalam kehidupan kita, termasuk sukses atau gagal.
Mungkin anda perlu merenungkan sikap yang dimiliki sekarang ini. Lihat korelasinya dengan kesuksesan anda saat ini. Perlukah anda memperbaiki sikap? Kejujuran anda terhadap sikap anda akan menentukan adanya perbaikan terhadap kehidupan anda. Sikap memang sulit untuk diubah, tetapi bukan tidak bisa.
Suatu saat mungkin anda merasa dunia ini bau terasi, kemana pun anda pergi bau terasi selalu tercium. Sebelum anda memutuskan bahwa dunia ini penuh dengan terasi, periksalah diri anda mungkin ada terasi pada kumis atau pakaian anda. Jika memang ada, bersihkan terasi tersebut dan dunia pun kembali segar.
Banyaknya tekanan hidup yang harus dialami seseorang membuat kebanyakan orang mengalami frustrasi. Beberapa orang menghadapi beban pekerjaan yang berat hingga mengalami stress pekerjaan. Bencana alam dan kematian orang dekat juga bisa membuat depresi dan frustrasi. Hanya sedikit orang yang sanggup menghindari tekanan hidup sehari-hari yang dapat membuat orang frustrasi dan berpandangan pesimistis. Namun, meski menghadapi kesukaran dan tekanan hidup, berpikir secara optimis sangatlah bermanfaat.
Optimisme merupakan sikap selalu mempunyai harapan baik dalam segala hal serta kecenderungan untuk mengharapkan hasil yang menyenangkan. Optimisme dapat juga diartikan berpikir positif. Jadi, optimisme lebih merupakan paradigma atau cara berpikir.
Sewaktu mengalami kegagalan atau tekanan hidup, bagaimana perasaan orang yang optimis? Seseorang yang berpikiran positif atau berpikir secara optimis tidak menganggap kegagalan itu bersifat permanen. Hal ini bukan berarti bahwa ia enggan menerima kenyataan. Sebaliknya, ia menerima dan memeriksa masalahnya. Lalu sejauh keadaan memungkinkan ia bertindak untuk mengubah atau memperbaiki situasi.
Bertolak belakang dengan optimisme, pandangan pesimistis akan menganggap kegagalan dari sisi yang buruk. Umumnya orang pesimis sering kali menyalahkan diri sendiri atas kesengsaraannya. Ia menganggap bahwa kemalangan bersifat permanen dan hal itu terjadi karena sudah nasib, kebodohan, ketidakmampuan, atau keburukannya. Akibatnya, ia pasrah dan tidak mau berupaya.
Berpikir positif juga menjadi kunci sukses untuk mengelola stress. Optimisme akan membuat seseorang menghadapi situasi tidak menyenangkan dengan cara positif dan produktif. Supaya anda bisa lebih optimistis dan memiliki pikiran serta sikap yang positif:
1. Periksalah diri anda.
2. Ikuti gaya hidup sehat.
3. Nikmatilah pekerjaan.
4. Carilah teman yang positif.
5. Hadapi dan terima.
6. Milikilah rasa humor.
7. Catatlah hal yang baik.
8. Aturan sederhana.

Teknik Sugesti

Pikiran bawah sadar tidak dapat membedakan imajinasi dan kenyataan. Ia tidak memiliki mekanisme untuk membedakan mana yang nyata dan tidak nyata. Jika anda sedang bermimpi dikejar-kejar oleh sesuatu, dalam mimpi anda benar-benar melarikan diri dan adrenalin anda mengalir begitu deras. Jantung anda berdenyut dengan sangat cepat. Tetapi apa yang anda ketahui setelah terbangun dari mimpi anda? Anda akan mengatakan, “Tidak ada apa-apa. Sebenarnya tidak ada sesuatu yang mengejar saya. Ini hanya mimpi…..”.
Inilah mekanisme pikiran sadar anda yang mengetahui bahwa anda sebenarnya sedang bermimpi. Tapi pikiran bawah sadar anda tidak mengetahui bahwa anda sedang bermimpi. Buktinya pikiran bawah sadar anda langsung memerintahkan denyut jantung untuk berdenyut kencang dan adrenalin anda untuk mengalir deras, karena yang pikiran bawah sadar anda rasakan adalah bahwa anda memang sedang dikejar-kejar.
Itulah sebenarnya hal yang paling penting yang bisa dimanfaatkan karena anda dapat mengelabuhi pikiran bawah sadar untuk melakukan hal apa pun yang bermanfaat bagi anda, terutama bila ada pekerjaan yang membosankan yang harus dilakukan. Anda bahkan bisa mengelabuhinya dengan berpikir bahwa pekerjaan itu adalah pekerjaan yang menarik untuk dikerjakan. Hal ini akan sangat bermanfaat jika misalnya anda harus melakukan pekerjaan yang tidak anda sukai sekalipun.
Bahasa yang diperlukan untuk mengelabuhi bawah sadar adalah sugesti. Sugesti ini dapat membangun bahkan merusak diri anda. Jadi, pastikan sugesti yang anda bentuk sudah melalui perhitungan yang matang ketika anda menciptakannya sejak awal. Sekali lagi, sugesti merupakan bahasa pikiran bawah sadar anda.
Karena sugesti adalah bahasa yang dapat dimengerti bawah sadar, maka ada aturan-aturan yang perlu diperhatikan sebelum memberikan sugesti ke dalam pikiran bawah sadar anda:
1. Positif.
2. Kalimat saat ini.
3. Pribadi.
4. Terus menerus.
5. Perasaan atau emosi.

Teknik Afirmasi
Sikap kita adalah cermin masa lampau kita, pembicara kita di masa sekarang dan merupakan peramal bagi masa depan kita. Kondisi masa lalu, sekarang, dan masa depan kita dapat tercermin dari bagaimana sikap kita sehari-hari. Sikap kita merupakan sahabat yang paling setia, namun juga bisa menjadi musuh yang paling berbahaya. Bagaimana sikap mental kita adalah sebuah pilihan: positif ataukah negatif.
Jika kita seorang yang berpikiran positif, kita pasti mampu menghasilkan sesuatu. Kita akan lebih banyak berkreasi daripada bereaksi. Jelasnya, kita lebih berkonsentrasi untuk berjuang mencapai tujuan-tujuan yang positif daripada terus saja memikirkan hal-hal negatif yang mungkin saja terjadi dalam kehidupan kita sehari-hari. Kehidupan dan kebahagiaan seseorang tidak bisa diukur dengan ukuran gelar kesarjanaan, kedudukan, maupun latar belakang keluarga. Yang dilihat adalah bagaimana cara berpikir orang itu.
Memang kesuksesan kita lebih banyak dipengaruhi oleh cara kita berpikir. Tempat dan keadaan tidak menjamin kebahagiaan. Kita sendirilah yang harus memutuskan apakah kita ingin bahagia atau tidak. Dan begitu kita mengambil keputusan, maka kebahagiaan itu akan datang.
Dengan bersikap positif bukan berarti telah menjamin tercapainya suatu keberhasilan. Namun, bila sikap kita positif, setidak-tidaknya kita sudah berada di jalan menuju keberhasilan. Berhasil atau tidaknya kita nanti ditentukan oleh apa yang kita lakukan di sepanjang jalan yang kita lalui tersebut.
Meskipun kita memiliki tubuh yang sehat, tetapi jika kita tetap berkata-kata yang negatif bahwa kita tidak mampu, tidak berharga untuk menerima berkat Tuhan dan bahkan mengutuk diri kita bahwa kita layak mendapatkan hukuman karena masa lalu kita, akhirnya kita akan memiliki harga diri yang rendah dan tidak dapat berjalan sesuai dengan gambar yang Tuhan miliki tentang kita.
Apa yang kita isi ke dalam roh dan pikiran kita sangatlah penting karena itu menentukan apa yang keluar dari mulut kita. Jika kita mengisi roh dan pikiran kita dengan pikiran negatif, kita akan mengucapkan hal-hal negatif. Kita harus mengucapkan kata-kata berkat kepada diri kita dan kita akan memakan buah dari kata-kata kita.
Ketika kita mengucapkan kata-kata positif setiap hari, maka kita akan segera melihat gambar diri kita berubah menjadi lebih baik. Kita akan merasa lebih baik, lebih percaya diri, lebih ramah, dan menarik banyak orang yang berpikiran positif kepada kita. Kita juga harus mendengarnya berulang kali.

Cara Berpikir Positif di Tempat Kerja
Tak hanya berpikir dan bersikap posirif terhadap perilaku seseorang, anda juga harus berlaku hal yang sama terhadap situasi yang buruk atau negatif jika kondisi tersebut menyerang anda, siapkan rencana lain untuk menghindari pikiran negatif. Misalnya kondisi perusahaan tempat anda bekerja terkena resesi dan hampir bangkrut. Anda bisa langsung bertindak cepat dengan mencoba bekerja paruh waktu di sebuah perusahaan kosmetik. Meski ada rekan kerja yang mengejek anda, jangan pedulikan. Anda melakukan hal tersebut untuk mencegah rasa putus asa dan perasaan negatif yang mungkin timbul dengan keadaan perusahaan tempat anda bekerja yang semakin memburuk.
Dengan memiliki rencana lain, anda akan merasa memiliki pilihan. Jika anda perhatikan, orang-orang yang berpikir negatif adalah mereka yang merasa tidak punya pilihan dan tidak tahu mau kemana. Mereka merasa terhenti di situ. Jadi, setiap ada kondisi buruk menimpa anda, segeralah cari pengalaman baru yang bisa menimbulkan pikiran dan perasaan positif.
Tak ada yang salah dengan orang yang mencintai pekerjaannya. Mencintai pekerjaan justru akan membuat kerja anda menghasilkan sesuatu yang luar biasa. Namun jangan sampai pekerjaan merenggut semua sisi kehidupan anda. Berikan waktu dengan kegiatan lain seperti melakukan hobby, berkumpul dengan keluarga atau teman-teman, atau kegiatan lain di luar pekerjaan.
Penelitian sudah membuktikan bahwa seseorang yang memiliki kehidupan yang seimbang antara karier dan keluarga atau hobby, akan lebih memiliki pikiran yang positif karena saat satu sisi kehidupan mereka tidak berjalan dengan baik, ia bisa menemukan keseimbangan lainnya, rasa percaya diri, harga diri, dan kesenangan dari sisi kehidupannya yang lain.
Jangan biarkan urusan pekerjaan menguasai hidup kita. Akan sangat menyedihkan jika di setiap saat dan setiap waktu, pikiran kita selalu tertuju pada pekerjaan. Jadi, setiap ada hal negatif di tempat kerja atau dimana pun, timbulkan perasaan positif tersebut agar anda tidak menjadi orang yang mudah putus asa.

(Disadur dari buku ‘Dahsyatnya Pikiran Positif’, oleh: Sisca Wardoyo)
Powered by: SECAPRAMANA.Com. Inc.

Iklan
DAHSYATNYA PIKIRAN POSITIF

Shrink Database & Log file using tempdb as a sampler

Shrink Database & Log file using tempdb as a sampler

Working with tempdb in SQL Server 2005

102 out of 113 rated this helpful Rate this topic
Published: June 26, 2006

SQL Server Technical Article

Writers: Wei Xiao, Matt Hink, Mirek, Sunil Agarwal

Technical Reviewer: Wei Xiao

Applies To: SQL Server 2005

Summary: This white paper describes how SQL Server 2005 uses tempdb. Many improvements in SQL Server 2005 optimize tempdb usage and make it easier to manage and to troubleshoot. A case study that uses a workload similar to TPC Benchmark H (TPC-H)  shows new ways to manage and troubleshoot tempdb resources. This paper also includes items to consider when upgrading to SQL Server 2005 and configuring tempdb.

On This Page

Introduction
tempdb Space Usage
Improvements in SQL Server 2005
tempdb Space Requirements
Monitoring and Troubleshooting
tempdb Configuration and Maintenance
Appendix: A Case Study

Introduction

The SQL Server system database, tempdb, has undergone a number of changes in SQL Server 2005. There are new tempdb usages and internal optimizations in SQL Server 2005; tempdbarchitecture is mostly unchanged since SQL Server 2000.

The tempdb system database is very similar to a user database. The main difference is that data in tempdb does not persist after SQL Server shuts down.

Each time SQL Server restarts, tempdb is copied from the model database. It inherits certain database configuration options, such as ALLOW_SNAPSHOT_ISOLATION, from the model database.

Only one file group in tempdb is allowed for data and one file group for logs. You can configure the size of the files. When auto grow is enabled (which is the default), the file grows until the disk volume is full. When the server restarts, the tempdb file size is reset to the configured value (the default is 8 MB). Auto grow is temporary for tempdb (unlike other types of databases). It is reset when SQL Server restarts.

Users can explicitly create and use tables in tempdb. Transactions can be used to modify data in the tables. Transactions can be rolled back. However, there is no need to REDO them because the contents of tempdb do not persist across SQL Server restarts. Because the transaction log does not need to be flushed, transactions are committed faster in tempdb than in user databases. In a user database, transactions have the ACID attributes: atomicity, concurrency, isolation, and durability. In tempdb, transactions lose the durability attribute.

SQL Server uses tempdb to store internal objects such as the intermediate results of a query. Most of these internal operations on tempdb do not generate log records because there is no need to roll back. So, these operations are faster.

There are some feature restrictions in tempdb. In addition, some of the database options cannot be modified for tempdb. For a list of these options, see tempdb Database in SQL Server 2005 Books Online.

Auto shrink is not allowed for tempdb. Database shrink and file shrink capabilities are limited. This is because many of the hidden objects that SQL Server stores in tempdb cannot be moved by shrink operations.

The following restrictions also apply to tempdb:

  • The database CHECKSUM option cannot be enabled.
  • A database snapshot cannot be created on tempdb.
  • DBCC CHECKALLOC and DBCC CHECKCATALOG are not supported.
  • Only offline checking for DBCC CHECKTABLE is performed. This means that a TAB-S lock is needed. There are internal consistency checks that occur when tempdb is in use. If these checks fail, the user connection is broken and the tempdb space used by the connection is freed.

tempdb Space Usage

The following types of objects can occupy tempdb space:

  • Internal objects
  • Version stores
  • User objects

Internal objects

Internal objects are created internally by SQL Server. Applications cannot directly insert into or delete rows from internal objects. Internal object metadata is stored in memory. The metadata does not appear in system catalog views such as sys.all_objects. Internal objects are considered to be hidden objects.

Internal objects are used:

  • To store intermediate runs for sort.
  • To store intermediate results for hash joins and hash aggregates.
  • To store XML variables or other large object (LOB) data type variables. The LOB data type includes all of the large object types: text, image, ntext, varchar(max), varbinary(max), and all others.
  • By queries that need a spool to store intermediate results.
  • By keyset cursors to store the keys.
  • By static cursors to store a query result.
  • By Service Broker to store messages in transit.
  • By INSTEAD OF triggers to store data for internal processing.

Internal objects are also used by any feature that uses these operations. For example, DBCC CHECK internally uses a query that may need to spool intermediate results. Query notification and event notification use Service Broker, so they need space in tempdb as well.

Updates to internal objects do not generate log records. Page allocations on internal objects do not generate log records unless on a sort unit. If the statement fails, these objects are deallocated. Each internal object occupies at least nine pages (one IAM page and eight data pages) in tempdb.

Version store

Version stores are used to store row versions generated by transactions for features such as snapshot isolation, triggers, MARS (multiple active result sets), and online index build. There are two version stores in tempdb for the whole instance of SQL Server. The online index build version store is for row versions from tables that have online index build operations on them. The common version store is for row versions from all other tables in all databases. For more information, see Row Versioning Resource Usage in SQL Server Books Online.

The version store consists of append-only store units. The append-only store units are highly optimized for sequential inserts and random look up. They do not appear in catalog views, such assys.all_objects. Inserts into the version store do not generate log records. Each unit can store many row versions. If there are versions to be stored, a new store unit is created about every minute. Versions generated by a transaction are stored in the same store unit in each of the two version stores for the life of the version store.

WorkingWithTempDB.jpg

In the illustration, there is one append-only store unit. It is created every minute starting with time T1. Any version generating a transaction that started between times T1 and (T1 + 1) will useAppend-Only Store Unit – 1 for storing any row version it generates, independent of its duration. For example, Tran1 starts at time T1 and updates a different row every 30 seconds until it commits at time T1 + 20. In this case, all 40 row versions are stored in Append-Only Store Unit – 1. The same is true for other transactions that start under different Append-Only Store Units as well.

Note that the size of a specific append-only store unit depends on the number of versions that are generated by the transactions that are associated with it. This is reflected in the Append-Only Store Units of different sizes in the illustration. However, a query that is running under snapshot isolation may read row versions from any Append-Only Store Unit that exists at the time the transaction under snapshot isolation starts until the time it is completed. The same is true for queries that are running under read committed snapshot as well. A background thread periodically deallocates whole append-only store units,  not individual row versions, that are not needed. This deallocation is done strictly in the order of allocation; therefore, Append-Only Store Unit-2 can only be deallocated after Append-Only Store Unit – 1.

For snapshot isolation and read committed snapshot isolation, the versions are generated by DML operations in the database when the respective database options are enabled. For AFTER triggers, versions are generated for all the update operations by the transaction that fired the trigger during the INSERT, DELETE, or UPDATE statement in any database, independent of database options. INSTEAD OF triggers do not generate versions. For MARS, versions are generated by the UPDATE or DELETE statement when there is a pending SELECT on the same transaction and the same connection. Similarly, building an online index generates versions of the rows while the online index is being built.

User objects

User objects appear in catalog views such as sys.all_objects. Sp_spaceused can show the size occupied by these objects. User objects include both user-defined tables and indexes, and system catalog tables and indexes. These two types of tables have exactly the same data structure on disk. User-defined tables can be manipulated by Transact-SQL. System catalog tables cannot be directly modified by Transact-SQL. They are visible by using system catalog views, and they are modified by using DDL statements to ensure logical consistency. Operations on user objects intempdb are mostly logged. Bulk copy program (BCP), bulk insert, SELECT INTO, and index rebuild operations are bulk logged. This is exactly the same as in other databases with the recovery model set to simple.

User-defined tables include the global temporary tables such as ##t, and local temporary tables such as #t. Both of these objects are session scoped but a global temporary table lives until all sessions that are using it expire or terminate. Local temporary tables, on the other hand, are destroyed when the scope (for example, stored procedure or session) they were created in expires or terminates. Local temporary tables also include table variables such as @t, the return value in table valued functions, and the mapping index for online clustered index build with the SORT_IN_TEMPDB option.

Improvements in SQL Server 2005

Following are some important improvements in tempdb in SQL Server 2005.

  • The tempdb logging optimization avoids logging the “after value” in certain log records in tempdb. When an UPDATE operation is performed without this optimization, the before and after values of the data are recorded in the log file. For example, if someone updates a data item from ABC to XYZ, ABC is the before value and XYZ is the after value, which does not need to be logged. For INSERT, there is only the after value (the value being inserted), which does not need to be logged. For DELETE, there is only the before value. This optimization primarily benefits INSERT and UPDATE operations on Heap and LOB data. This optimization can significantly reduce the size of the tempdb log as well as reduce the amount of I/O traffic on the tempdb log device.
  • Instant data file initialization works by not zeroing out the NTFS file when the file is created or when the size of the file is increased. This minimizes overhead significantly when tempdbneeds to auto grow. Without this, auto grow could take a long time and lead to application timeout. This optimization requires Microsoft® Windows XP or Windows 2003, and it requires special volume permission on the SQL Server service account. For more information, see Instant File Initialization in SQL Server Books Online.
  • There is less use of the UP type page latch when allocating pages and extents in tempdb. In addition, allocating the first eight pages of a table is more efficient. As a result there should be less contention on the PFS (Page Free Space), SGAM (Secondary Global Allocation Map), and GAM (Global Allocation Map) pages when there are a high number of users usingtempdb at the same time.
  • Proportional fill has been optimized to reduce UP latch contention. Proportional fill means that, when there are multiple data files in tempdb, each file is filled in proportion to the free space that is available in the file so that all of the files fill up at about the same time. This was accomplished by removing a latch that was taken during proportional fill. In SQL Server 2000, this latch could become a contention point when there were a high number of users using tempdb at the same time. Proportional fill has been optimized to eliminate this latch. With this change in SQL Server 2005, applications will experience less UP latch contention in tempdb.
  • There is now deferred drop in tempdb. This means, for example, that when a large temporary table is dropped by an application, it is handled by a background task and the application does not have to wait. This results in faster response time to applications.
  • Worktable caching is improved. When a query execution plan is cached, the work tables needed by the plan are not dropped across multiple executions of the plan but merely truncated. In addition, the first nine pages for the work table are kept. In SQL Server 2000, the work tables used during query plan execution are dropped. Because the work table is cached, the next execution of the query is faster. When the system is low on memory, the execution plan may be removed from the cache and the associated work tables dropped as well. Both SQL Server 2000 and SQL Server 2005 use a small global pool of pre-allocated pages and extents that make the initial creation of work tables faster.
  • SQL Server 2005 caches temporary objects. When table-valued functions, table variables, or local temporary tables are used in a stored procedure, function, or trigger, the frequent drop and create of these temporary objects can be time consuming. This can cause contentions on tempdb system catalog tables and allocation pages. In SQL Server 2005, these are cached. That means that dropping and creating temporary objects is very fast. When SQL Server drops a temporary object, it does not remove the catalog entry for the object. If a temporary object is smaller than 8 MB, then one data page and one IAM page are also cached so that there is no need to allocate them when re-creating the objects. If a temporary object is larger than 8 MB, defer drop is used. When tempdb is low on space, SQL Server frees up the cached temporary objects. You can drop the associated stored procedure(s) or free the procedure cache to get rid of these temporary tables.
  • SQL Server 2005 caches the temporary table that is created by using a CREATE TABLE or SELECT INTO statement. In some cases, temporary tables are not cached, such as when there is an explicit DDL on a temporary table after it is created, or if there is a named constraint on the temporary table. Temporary tables are also not cached if they are part of dynamic SQL or ad-hoc batch. The following example shows the creation of a temporary table using dynamic SQL. This table will not be cached.

    sp_executeSQL N’create table #t(a int)’

tempdb Space Requirements

It is difficult to estimate the tempdb space requirement for an application. This section describes the general methodology for estimating the space requirement. These methods are not precise. It requires experience and experiment to gain a satisfactory result. We recommend that you always have a safety factor of about 20% more space. Space estimates must also allow for the future growth of data in the application.

To understand the space requirement of tempdb data files, first look at which features of SQL Server 2005 use tempdb. The tempdb space requirement is different for each feature. The following features use tempdb:

  • Query
  • Triggers
  • Snapshot isolation and read committed snapshot (RCSI)
  • MARS
  • Online index creation
  • Temporary tables, table variables, and table-valued functions
  • DBCC CHECK
  • LOB parameters
  • Cursors
  • Service Broker and event notification
  • XML and LOB variable
  • Query notifications
  • Database mail
  • Index creation
  • User-defined functions

A server instance may use some or all of these features. For some servers, one or two features might dominate tempdb space usage. In this case, we concentrate most of the capacity planning effort on these few features. For example, you may find out that for one server, a query requires a peak of 50 GB of tempdb space, and RCSI requires a peak of 20 GB of tempdb space, and the remaining features require only 1 GB of peak space. It would be sufficient to allocate 85 GB (71GB + 20% overhead) of tempdb space for this server.

Space required by queries

Applications usually send many queries to SQL Server. If queries are sent to the server serially, the peak tempdb space requirement is determined by the query that requires most of thetempdb space. If queries are executed at about the same time, the total tempdb space requirement is the sum of the requirement of all queries.

SQL Server has a cost-based query optimizer. It chooses a query plan that has the lowest execution cost but it ignores the implications of this plan on tempdb. As a result, the tempdb space requirement for a query may vary, depending on the plan. In some cases, the best plan according to the query optimizer may require more tempdb space than a less efficient plan would. Also, when an application is upgraded from SQL Server 2000, a plan change may require more space in tempdb.

For capacity planning, prepare for the worst-case scenario. Otherwise a query may fail due to a space error in tempdb. In some cases, auto grow can be used to expand a tempdb file until there is no space remaining in the disk volume.

To estimate the maximum tempdb space required for a query, look at the query plan. There are several ways to view a query plan in SQL Server. SQL Server Management Studio can show the query plan that is in use, or estimate a query plan in graphical format. For more information, see Analyzing a Query in SQL Server Books Online.

The common operators that require tempdb space are listed in the following table. Each of these operators consumes some number of rows and outputs some number of rows.

Query operators that use tempdb

Sort (including distinct sort) The sort operator needs tempdb space to sort the full rowset (the rowset that goes through the sort operator).
Hash match This operator has two inputs—one to build the hash table and other to probe it. Depending on its size, a hash table might be in tempdb. Look at the number of rows and row size returned by the first input operator.
Spool (including table spool, nonclustered index spool) This operator requires that the full input rowset be stored in tempdb.

To estimate the space required by each operator, look at the number of rows and the row size reported by the operator. To calculate the space required, multiply the actual (or estimated) number of rows by the estimated row size. Be aware that the estimated number of rows and estimated row size can be incorrect by a very large margin, due to incorrect statistics and other issues. Adjust your estimates based on your knowledge of the data.

Space required by features that use version store

The version store is a collection of hidden objects in tempdb that support the following features:

  • Snapshot isolation
  • Read committed snapshot isolation (RCSI)
  • Online index build
  • Triggers
  • MARS

There are two version stores. One of these stores row versions that are generated when an online index is built. The second stores row versions that are generated for the other operations mentioned in the previous bulleted list. New versions are inserted into the version store when there are DML operations in a database. DML operations might be UPDATE, DELETE, and sometimes INSERT (if inserting a row with the same unique key as the row that was deleted). Old versions are removed when they are no longer needed. The size of the version store depends on two factors: how long the versions are needed and how many versions are generated.

One of the two version stores is for tables that are under online index build operations. The versions in this store are needed as long as an online index build transaction is active. For a very large index, these transactions could be active for hours or even days. Fortunately, the versions in this store are only from the tables with active online index build operations, so this could be a very small subset of all the versions that could be generated in a large system. For example, you are building a new nonclustered index online on a big table. You estimate that this will take about 12 hours. During this time, you estimate that about 600 data records in this table will be changed per hour by the concurrent DML. The version store keeps the entire record, so you assume that the average record size of the table is 1 KB. The space required in the version store is 12*600*1KB = 7200KB.

The other version store is for versions generated on all tables except those that are under active online index build. The versions in this store are needed as long as there is an active transaction that uses one of these features: snapshot isolation, read committed snapshot isolation (RCSI), triggers, or MARS.

For example, if the longest running transaction in your SQL Server instance is a snapshot isolation transaction that is doing a complex report that takes five hours, then the versions are needed in the version store for five hours. Different features use version stores in different ways. Keep this in mind when estimating the number of version records generated per minute.

For snapshot isolation and RCSI, as long as the database option is set, any update in the database is versioned. For example, the maximum update rate is 1,000 records per minute in all the databases with the options set, and the average record size is 1 KB. The version store space required for this system with five hours of maximum transaction time is approximately 5*60*1000*1KB=300MB. If a snapshot isolation transaction starts concurrently before the first transaction commits, the versions are kept until the snapshot isolation is complete. So the version store must be kept for more than five hours. A general method for estimating the size of version store is to multiply the size of the version store that was generated during the execution of the longest transaction by two. When the database is enabled for snapshot isolation or RCSI, only the first update to a particular record in a transaction generates a version.

For triggers, the original triggering DML plus all the updates that are done inside the trigger body generate a version.

For MARS, all updates generate versions when there is a concurrent active rowset that returns results, such as the results that are returned by a SELECT statement.

Space required by other features

Temporary tables, table variables, and table-valued functions all use space in tempdb. The application has explicit control over how much data goes into these objects. The space occupied by these objects should be estimated in the same way as user tables.

LOB variables (including parameters) and XML variables all consume space in tempdb. This is new in SQL Server 2005. In SQL Server 2000, these variables were only memory-resident. The intermediate result of a LOB or XML expression can also consume space in tempdb. To estimate the space requirement, look at the programming logic and try to find a reasonable upper limit of the resource requirement.

DBCC CHECK internally starts a query to verify the consistency of data. The execution plan of this query cannot be displayed. However, there is an option to estimate the space requirement for this command. If you suspect that there may not be enough tempdb space, estimate the space requirement before you run the command. Otherwise the application might fail because DBCC CHECK is competing with the application for tempdb space.

Service Broker uses about 1 MB per dialog. Unless the application starts a lot of dialogs without closing them, space usage should not be an issue. Also keep in mind that other features, such as event notification, use Service Broker.

Index build has an option to sort in tempdb. The sort requires about the same amount of tempdb space as does the index that is being built. For online index build, we may also need a mapping index. To calculate the size of this index, multiply the average key size by the number of rows in the index.

Two kinds of server-side cursors require tempdb space: static and keyset. For static cursors, space is required for the whole result. For keyset cursors, the space required is the average key size multiplied by the number of rows in the result set.

Space required for tempdb logging

Most operations in tempdb are not logged. Operations on temporary tables, table variables, table-valued functions, and user-defined tables are logged. These are called user objects. Sort operations in tempdb also require logging for activities related to page allocation. The log size requirement depends on two factors: how long it is necessary to keep the log and how many log records are generated during this time.

Estimating the log space for tempdb is similar to estimating the log file size for other databases. However, when you estimate the tempdb log size, you pay attention only to operations that generate log records. For example, the longest running transaction in tempdb is an index build operation that uses sort. This transaction ran for five hours. An estimated 1,000 temporary table records were fully overwritten per minute by updates. The average record size is 1 KB. The calculation for the log space required is 5*60*1000*1KB = 300MB.

Since log truncation can become a contention point in a heavily loaded system with a small log file, make the tempdb log file large enough to avoid truncating logs frequently. For example, if 50 MB of the log file can be generated per second in the system, the log size should be at least 500 MB so that a log truncation is performed about every 10 seconds.

Monitoring and Troubleshooting

The tempdb shared resource must be managed well for the smooth functioning of SQL Server. A rogue query or a poorly designed application can potentially consume all tempdb resources, thereby rendering a SQL Server instance unusable.

Administrators work with the following types of resources in tempdb:

  • Space. This refers to both used and unused space in data and log files.
  • I/O bottlenecks.
  • Contention in DML operations. This relates to page and extent allocations and deallocations for all type of objects in tempdb.
  • Contention in DDL operations. This relates to the manipulation of metadata when user objects in tempdb are created or dropped. Note that internal objects are not reflected in metadata tables

One of challenges in managing tempdb is that there is no way to partition its resources based on user databases, applications, or user sessions. You cannot even partition resources based on the category of objects (such as version stores) that are stored. It seems useful to partition tempdb resources to isolate applications from one another but then the burden is on the applications or on the administrators to partition these resources in such a way so as to minimize waste. For example, if you put an upper bound on the tempdb resources that can be consumed by an application, you may be forced to abort one or more transactions even if those resources were not being used by any other applications or queries.

In SQL Server, these resources are managed as a global pool. SQL Server 2005 provides a rich set of tools for monitoring resources in tempdb so that you can isolate applications or queries that are consuming significant resources in tempdb with relative ease and take appropriate corrective action.

This section describes which resources you need to monitor and the tools available to you to accomplish this. It also covers how to troubleshoot problems related to specific resources. Active monitoring is useful to spot the problems early so that you can take corrective action before problems become catastrophic. There are significant improvements to the ways you can monitortempdb resources in SQL Server 2005.

Space in tempdb

Most queries and DML statements allocate space in tempdb either implicitly (for example, by using work tables) or explicitly (for example, by using user-defined temporary tables). If there is no space left in tempdb, the server can become unusable. You might run out of space in tempdb when it reaches its maximum size limit or if there is no space remaining in the physical disk to store tempdb data and log files. The only course of action at this stage is to kill one or more sessions and/or transactions to free up space in tempdb.

Space management in tempdb is even more critical in SQL Server 2005 as it has new features (such as row versioning, MARS, triggers, and online index) that use tempdb heavily. Sincetempdb is a global resource, unless the tempdb space used by the set of applications that are running on the server is very well understood, there is very little a system administrator can do to control tempdb space usage except to monitor it and act appropriately when the available space in tempdb falls below critical limit.

Monitoring space

This section describes performance counters and dynamic management views (DMVs) that you can use to monitor space usage in tempdb.

Performance Counters

Database: Log File(s) Size(KB)

Returns the cumulative size of all the log files in the database. This size can grow if you have not set a maximum size for the log in tempdb.

Database: Log File(s) Used (KB)

Returns the cumulative used size of all log files in the database. A large active portion of the log in tempdb can be a warning sign that a long transaction that is preventing log cleanup.

Free Space in tempdb (KB) (SQL Server 2005)

Tracks free space in tempdb in kilobytes. Administrators use this counter to determine if tempdb is running low on free space so they can take appropriate corrective action. This counter accounts for space allocated by all three types of objects in tempdb.

Version Store Size (KB) (SQL Server 2005)

Monitors the size in KB in both version stores. If a version store is not shrinking, it implies that a long-running transaction is preventing version store cleanup.

Version Generation Rate (KB/s) (SQL Server 2005)

Monitors the version generation rate in kilobytes per second (KBps) in both version stores.

Version Cleanup Rate (KB/s) (SQL Server 2005)

Monitors the version cleanup rate in KBps in all version stores. If the version cleanup rate is lower than the version generation rate, the version store will use more and more space in tempdb. However, if the version cleanup rate is 0 but the version generation rate is not, there is probably a long-running transaction that is preventing the version store cleanup.

Dynamic Management Views

SQL Server 2005 provides a rich set of DMVs to track tempdb space usage. You can track tempdb space usage at the instance level, the session level, or by individual task (a task is also known as a batch) by using the following DMVs.

Sys.dm_db_file_space_usage

This DMV returns space allocation information for the files associated with tempdb. The allocation information is grouped by object category (user, internal, and version store) for the instance. The following code is an example.

SELECT
SUM (user_object_reserved_page_count)*8 as usr_obj_kb,
SUM (internal_object_reserved_page_count)*8 as internal_obj_kb,
SUM (version_store_reserved_page_count)*8  as version_store_kb,
SUM (unallocated_extent_page_count)*8 as freespace_kb,
SUM (mixed_extent_page_count)*8 as mixedextent_kb
FROM sys.dm_db_file_space_usage

The following sample output was generated when a query was executed with a hash-join that created a work table.

usr_obj_kb internal_obj_kb version_store_kb freespace_kb mixedextent_kb
8192            4608                 0                3840        1024

You can use the output to learn how tempdb space is being used. The following points will help you analyze the output.

  • A higher % allocation for user objects implies that objects that are created by applications (for example, global and local temporary tables and variables) are the major consumers oftempdb. This is not necessarily a cause of concern.
  • A higher % allocation for internal objects implies that the query plans make heavy use of tempdb. This is not necessarily a problem, but you may want to look at the query plans to see if alternate query plans can be generated by creating indexes or by re-formulating the queries so as to minimize tempdb space usage.
  • A higher % allocation for the version store implies that version store cleanup cannot keep pace with version generation. See if a long-running transaction is preventing version store cleanup. Or, a high transaction throughput might be generating a large number of versions per minute. The background task cleans up versions every minute.

Sys.dm_db_session_file_usage

This DMV tracks the historical allocation/deallocation of pages in tempdb for the active sessions. A session is established when a user connects to the database. The session is active until the connection is terminated. During the course of the session, the user submits one or more batches. This DMV tracks the tempdb space usage only by the completed batches. The following code example shows the top five sessions that have allocated a maximum space for user objects and internal objects in tempdb. This represents the batches that have already completed, but the code lists sessions with heavy tempdb space use. You could look at these first if you want to minimize tempdb consumption. Note that this tempdb space usage does not take into account the impact of this session on the version store space.

SELECT top 5 * 
FROM sys.dm_db_session_space_usage  
ORDER BY (user_objects_alloc_page_count +
 internal_objects_alloc_page_count) DESC

Sys.dm_db_task_space_usage

This DMV tracks the allocation/deallocation of tempdb pages by the currently executing tasks (also called batches). This is extremely useful when you are running out of space in tempdb. Using this DMV, you can identify tasks with heavy tempdb space use and optionally kill them. You can then analyze why these tasks require heavy tempdb space usage and take corrective action. You can join this DMV with other DMVs to identify the SQL statement and its corresponding query plan for deeper analysis. The following query shows the top five tasks that are currently executing tasks and consuming the most tempdb space. The tempdb space usage returned does not allow for the impact on space consumed by the version store.

SELECT top 5 * 
FROM sys.dm_db_task_space_usage
ORDER BY (user_objects_alloc_page_count +
 internal_objects_alloc_page_count) DESC
Troubleshooting space

The first thing to do to troubleshoot space problems in tempdb is to configure tempdb for your workload. Monitoring tempdb size over time will help you determine the optimal size. Like any other database, tempdb  grows incrementally (either by a fixed size or a percentage) based on the workload. The maximum size a file can grow to is determined by the upper bound of the MAXSIZE of each file or by the available space in the physical device. For example, if the optimal size of your tempdb is 1 GB, then you should configure tempdb with this starting size to minimize fragmentation. After that, continue to monitor tempdb resources and, when needed, take appropriate corrective action.

Tools for troubleshooting

Before SQL Server 2005, troubleshooting tempdb space was difficult because:

  • There was no easy way (short of dumping the space management structures) to estimate the tempdb space used by internal objects. This made it hard to estimate how much free space was available in tempdb.
  • There was no visibility of tempdb usage at a session or task level. If tempdb was running out of space, it was difficult to determine which query or session was consuming the majority of resources. That made it easy to make the mistake of killing the wrong session or task.

The following tools in SQL Server 2005 for monitoring space usage in tempdb make it easier to troubleshoot problems.

  • Use the new DMVs to analyze which Transact-SQL statements are the top consumers of tempdb space as described in Monitoring space in this paper. For example you can use the following query that joins the sys.dm_db_task_space_usage and sys.dm_exec_requests DMVs to find the currently active requests, their associated TSQL statement, and the corresponding query plan that is allocating most space resources in tempdb. You may be able to reduce tempdb space usage by rewriting the queries and/or the stored procedures, or by creating useful indexes.
    SELECT t1.session_id, t1.request_id, t1.task_alloc,
      t1.task_dealloc, t2.sql_handle, t2.statement_start_offset, 
      t2.statement_end_offset, t2.plan_handle
    FROM (Select session_id, request_id,
        SUM(internal_objects_alloc_page_count) AS task_alloc,
        SUM (internal_objects_dealloc_page_count) AS task_dealloc 
      FROM sys.dm_db_task_space_usage 
      GROUP BY session_id, request_id) AS t1, 
      sys.dm_exec_requests AS t2
    WHERE t1.session_id = t2.session_id
      AND (t1.request_id = t2.request_id)
    ORDER BY t1.task_alloc DESC

    Note that if a query is executing in parallel, each parallel thread runs under the same <session-id, request-id> pair.

  • You can actively monitor free space in tempdb by using the perfmon free space in tempdb (KB) counter. If space in tempdb is critically low, query the sys.dm_db_task_space_usageDMV to find out which tasks are consuming the most space in tempdb. You can kill such tasks, where appropriate, to free space.
  • If the version store is not shrinking, it is likely that a long-running transaction is preventing version store cleanup. The following query returns the five transactions that have been running the longest and that depend on the versions in the version store.
    SELECT top 5 transaction_id, transaction_sequence_num, 
    elapsed_time_seconds 
    FROM sys.dm_tran_active_snapshot_database_transactions
    ORDER BY elapsed_time_seconds DESC
  • tempdb can only be configured in the simple recovery model. Typically, the transaction log is cleared with the implicit or the explicit checkpoints. An active long-running transaction can prevent transaction log cleanup and can potentially use up all available log space. To identify a long-running transaction, query the sys.dm_tran_active_transactions DMV to find the longest running transaction and, if appropriate, kill it.

I/O in tempdb

Like user databases, the data pages in tempdb incur physical I/Os under memory pressure in SQL Server. The lazy writer flushes dirty data pages in the background. A physical I/O is incurred when the requested page is not found in the buffer pool. However, the log pages in tempdb do not need to be flushed when a transaction is committed. This is because tempdb is re-created when SQL Server restarts. The log pages are only flushed under memory pressure. A bottleneck in tempdb I/Os can impact the overall throughput of your SQL Server.

Monitoring I/O

The first step in solving performance issues is to identify the resources that are experiencing bottlenecks. For example, if CPU is 100% used, this indicates a bottleneck in CPU resources. Similarly, an I/O bottleneck is indicated if I/O requests are queuing up. You can identify I/O bottlenecks by monitoring the following perfmon counters for physical devices associated withtempdb.

PhysicalDisk Object: Avg. Disk Queue Length: The average number of physical read and write requests that were queued on the selected physical disk during the sampling period. If the I/O system is overloaded, more read/write operations will be waiting. If the disk queue length exceeds a specified value too frequently during peak usage of SQL Server, there might be an I/O bottleneck.

Avg. Disk Sec/Read: The average time, in seconds, of a read of data from the disk. Use the following to analyze numbers in the output.

  • Less than 10 milliseconds (ms) = very good
  • Between 10-20 ms = okay
  • Between 20-50 ms = slow, needs attention
  • Greater than 50 ms = serious IO bottleneck

Avg. Disk Sec/Write: The average time, in seconds, of a write of data to the disk. See the guidelines for the previous item, Avg. Disk Sec/Read.

Physical Disk: %Disk Time: The percentage of elapsed time that the selected disk drive was busy servicing read or write requests. A general guideline is that if this value > 50%, there is an I/O bottleneck.

Avg. Disk Reads/Sec: The rate of read operations on the disk. Make sure that this number is less than 85% of disk capacity. Disk access time increases exponentially beyond 85% capacity.

Avg. Disk Writes/Sec: The rate of write operations on the disk. Make sure that this number is less than 85% of the disk capacity. Disk access time increases exponentially beyond 85% capacity.

Database: Log Bytes Flushed/sec: The total number of log bytes flushed. A large value indicates heavy log activity in tempdb.

Database:Log Flush Waits/sec: The number of commits that are waiting on log flush. Although transactions do not wait for the log to be flushed in tempdb, a high number in this performance counter indicates and I/O bottleneck in the disk(s) associated with the log.

Troubleshooting I/O

If you determine that a query or application slowdown is caused by an I/O bottleneck in tempdb, troubleshoot as follows:

  • Identify queries that consume large amounts of space in tempdb and see if alternate query plans can be used to minimize the amount of space required by the query.
  • See if you have a memory bottleneck that is manifesting itself into I/O problem.
  • See if you have a slow I/O subsystem.

Use optimal execution plans

Examine execution plans and see which plans result in more I/O. It is possible that by choosing a better plan (for example, by forcing an index usage for a better query plan), that you can minimize I/O. If there are missing indexes, run Database Engine Tuning Advisor to find the missing indexes. In SQL Server 2005, you can use the following DMV to identify and analyze the queries that are generating the most I/Os.

SELECT top 10 (total_logical_reads/execution_count),
  (total_logical_writes/execution_count),
  (total_physical_reads/execution_count),
  Execution_count, sql_handle, plan_handle
FROM sys.dm_exec_query_stats  
ORDER BY (total_logical_reads + total_logical_writes) Desc

To get the text of the query, run the following DMV query.

SELECT text 
FROM sys.dm_exec_sql_text (<sql-handle>

You can examine the query plan by using the following DMV query.

SELECT *
FROM sys.dm_exec_query_plan (<plan_handle>\

Check memory configuration

Check the memory configuration of SQL Server. If SQL Server is configured with insufficient memory, it incurs more I/O overhead. You can examine following perfmon counters to identify memory pressure:

  • Buffer Cache hit ratio
  • Page Life Expectancy
  • Checkpoint pages/sec
  • Lazywrites/sec

Increase I/O bandwidth

Add more physical drives to the current disk arrays. You could also replace your disks with faster drives. This helps to boost both read and write access times. Do not add more drives to the array than your I/O controller can support.

DML operations in tempdb

DML operations (INSERT, DELETE, and UPDATE) that manipulate data often lead to the allocation and deallocation of pages in tempdb. Excessive page allocation/deallocation activity intempdb can lead to contention in the allocation structures that track allocation information. For example, PFS pages track the free space in the page, GAM pages track the allocated extents, and SGAM pages track allocation in the mixed extents. Any contention in these meta-pages can affect the performance on the workload. This section describes how to detect if a SQL Server slowdown is due to a contention in allocation structures and how to troubleshoot this condition.

Monitoring contention caused by DML operations

Any page allocation/deallocation or any space-changing operation (such as INSERT)  acquires a latch on PFS, SGAM or GAM pages to update the space tracking information. Since most temporary objects are heaps and are less than 64 KB in size, a large number of such operations can cause excessive waits when acquiring latches. This can significantly degrade application throughput. Following are some tools that you can use to monitor the contention in allocation structures.

Perfmon counters

Use these performance counters to monitor allocation contention in SQL Server.

  • Access Methods::Worktables Created/sec: The number of work tables created per second. Work tables are temporary objects and are used to store results for query spool, LOB variables, and cursors. Typically, this number is < 200.
  • Access Methods::Workfiles Created/sec: The number of work files created per second. Work files are similar to work tables but are created strictly by hashing operations. Work files are used to store temporary results for hash joins and hash aggregates.
  • Access Methods: Worktables From Cache Ratio: The percentage of work tables that were created where the initial two pages of the work table were not allocated but were immediately available from the work table cache. In SQL Server 2000, there is no caching of temporary tables.
  • Temp Tables Creation Rate (SQL Server 2005): The number of temporary table or variables created/sec.
  • Temp Tables For Destruction (SQL Server 2005): The number of temporary tables or variables waiting to be destroyed by cleanup system thread.

Query the system table

If you experience allocation bottlenecks, query the sysprocesses table. Any time you see tasks waiting to acquire latches on tempdb pages, you can analyze to see if this is due to PFS and SGAM pages. If it is, this implies an allocation contention in tempdb.

You can look for PFS and SGAM pages by using waitresource. For example  ‘2:1:1’ or ‘2:1:3’ refer to the first PFS page and the first SGAM page in file1 of the tempdb database (id=2). SGAM pages re-occur after every 511,232 pages and each PFS page occurs after every 8,088 pages. You can use this information to find all other PFS and SGAM pages across all files in tempdb.

The following code example queries the sysprocesses table for all latch waits on all pages in database id = 2.

SELECT * 
FROM sys.sysprocesses  
WHERE lastwaittype like 'PAGE%LATCH_%' AND waitresource like '2:%'

Query DMVs

In SQL Server 2005, you can accomplish the same thing by using the DMV sys.dm_os_waiting_tasks as in the following code example.

SELECT session_id, wait_duration_ms, resource_description
FROM sys.dm_os_waiting_tasks
WHERE wait_type like 'PAGE%LATCH_%' AND resource_description like '2:%'

Once you know the page number, you can use the following query to find the type of the page and the object it belongs to. If you see the contention in PFS, GAM or SGAM pages, it implies contention in allocation structures.

SELECT P.object_id, object_name(P.object_id) as object_name, 
       P.index_id, BD.page_type
FROM 	 sys.dm_os_buffer_descriptors BD, sys.allocation_units A,
     	 sys.partitions P 
WHERE  BD.allocation_unit_id = A.allocation_unit_id and  
       A.container_id = P.partition_id

Troubleshooting contention caused by to DML operations

If you determine that the throughput of your application has degraded because of contention in allocation structures, you can use the following techniques to minimize it.

  • Evaluate your application and the query plans to see if you can minimize the creation of work tables and temporary tables. Monitor the perfmon counters as described in Monitoring contention caused by DML operations. Then, use SQL Profiler to correlate the values of these counters with the currently running queries. This helps you identify the queries that are causing the contention in allocation structures.
  • Divide tempdb into multiple data files of equal size. These multiple files don’t necessarily be on different disks/spindles unless you are also encountering I/O bottlenecks as well. The general recommendation is to have one file per CPU because only one thread is active per CPU at one time. SQL Server allocates pages for tempdb objects in a round-robin fashion (also referred to as proportional fill) so that the latches on PFS and SGAM pages are distributed among multiple files. This is supported both in SQL Server 2000 and SQL Server 2005. There are improvements to the proportional fill algorithm in SQL Server 2005.
  • Use TF-1118. Under this trace flag SQL Server allocates full extents to each tempdb object, thereby eliminating the contention on SGAM page. This is done at the expense of some waste of disk space in tempdb. This trace flag has been available since SQL Server 2000. With improvements in tempdb object caching in SQL Server 2005, there should be significantly less contention in allocation structures. If you see contention in SGAM pages, you may want to use this trace flag. Cached tempdb objects may not always be available. For example, cachedtempdb objects are destroyed when the query plan with which they are associated is recompiled or removed from the procedure cache.

DDL in tempdb

Contention for DDL operations only occurs for user objects in tempdb. Metadata for internal objects, such as work tables, is cached and is not created in the system catalog. However, metadata for user objects, such as local and global temporary tables and table variables, is created in the system catalog. If your workload or application creates and drops a large number of user objects in tempdb, contention in system catalog tables might cause throughput to slow down.

Monitoring contention in DDL operations

Use these methods to monitor DDL contention in tempdb.

Queries and DMVs

You can use queries as described in Monitoring contention caused by DML operations to monitor contention in DDL operations. These queries can be used to identify the latch contention in pages. If the page that is incurring a latch contention is a page that belongs to system catalog, it means you have DDL contention.

Perfmon counters

Use these performance counters to monitor DDL contention.

  • Temp Tables Creation Rate (SQL Server 2005): The number of temporary tables or variables that are created per second. The value depends on the workload. If your workload creates many temporary tables and the temporary table cache cannot be used, you may see high values. In such cases investigate why the temporary table cache cannot be used; this might be by design in the application. For example, if there is an explicit DDL after the temporary table is created, the table cannot be cached. In a perfect scenario, if there were 100% temporary table cache hits, this counter would be 0
  • Temp Tables For Destruction (SQL Server 2005): The number of temporary tables or variables waiting to be destroyed by the cleanup system thread. The number of temporary tables or variables waiting to be destroyed by the cleanup system thread should be 0. Temporary spikes are expected, but should be rare. Spikes can happen when the temporary table cache or the procedure cache is being cleaned up.
Troubleshooting contention in DDL operations

Evaluate your application and query plans and see if you can minimize the creation of temporary tables. To do this, monitor the perfmon counters Temp Tables Creation Rate and Temp Tables For Destruction. You can also run SQL Profiler to correlate the values of these counters with the currently running queries. This will help you identify the queries that are causing the contention in system catalog. This might occur, for example, if a temporary object is being created inside a loop or a stored procedure.

Verify if temp objects (temp tables and variables) are being cached. SQL2005 caches Temp objects only when the following conditions are satisfied:

  • Named constraints are not created.
  • Data Definition Language (DDL) statements that affect the table are not run after the temp table has been created, such as the CREATE INDEX or CREATE STATISTICS statements.
  • Temp object is not created by using dynamic SQL, such as: sp_executesql N’create table #t(a int)’.
  • Temp object is created inside another object, such as a stored procedure, trigger, and user-defined function; or is the return table of a user-defined, table-valued function.

tempdb Configuration and Maintenance

tempdb is re-created each time SQL Server starts. The data files are initialized and the tempdb size is set to the default, unless it was explicitly set using the ALTER DATABASE command. This section covers the following considerations for configuring and maintaining tempdb:

  • tempdb size, including the right number of files and file size
  • tempdb log size
  • Version store size
  • tempdb auto grow setting
  • Shrinking files

tempdb size, including the right number of files and file size

tempdb supports only one data filegroup and one log filegroup. By default, the number of files is set to 1. Multiple files can be created for each filegroup. Adding more data files may help to solve potential performance problems that are due to I/O operations. Increasing the number of files helps to avoid a latch contention on allocation pages (manifested as a UP-latch). The recommended solution is to set the number of files to match the number of CPUs that are configured for the instance. This is only a recommendation—the number of files might not be the same as the number of CPUs.

Having too many files increases the cost of file switching, requires more IAM pages, and increases the manageability overhead. The size of each file is configurable. More files can be added, moved, or removed. To better use the allocation mechanism (proportional fill), the size of the files should be equal. Generally, for SQL Server 2005 it is recommended that you create tempdbfiles striped across fast disks.

To estimate the data file size, three types of tempdb space containers should be taken into account:

  • user objects
  • internal objects
  • version store

The size allocated for user objects depends on the user application and on the amount of space that is created by the application for user-defined tables, global and local temporary tables, indexes, and table variables. In addition, any clustered index online operation executed by the database administrator (DBA), such as to create or alter a clustered index, generates a special object called a mapping index in the user space. To obtain the size of user objects used for tempdb see Monitoring space in this white paper.

Since an application cannot directly insert or delete rows from internal objects, the size of internal objects depends primarily on the size of the objects that are created internally by SQL Server. Query operations such as hash joins, hash aggregates, group by, order by, and index sorts (when SORT_IN_TEMPDB specified) allocate space as internal objects. The same applies to operations related to Service Broker, DBCC, XML, or LOB variables. To obtain the size of internal objects used for tempdb, see Monitoring space.

tempdb log size and version store size

The tempdb, log, and version store size are discussed in tempdb Space Usage.

tempdb auto grow setting

tempdb does not require high maintenance. By default, tempdb is set to auto grow; once the space in the file is full, the file is allowed to grow 10 % of the initial file size. However, relying on auto grow to manage file growth causes all applications or internal operations that use tempdb to pause. Instant data file initialization (see Improvements in SQL Server 2005) shortens this pause, improves performance, and allows files to grow much faster as compared to SQL Server 2000. It is important to note that auto grow can lead to data fragmentation and should be used as a last resort.

Shrinking files

Shrinking files is not a recommended practice, since these files will probably grow again. In addition, shrink operations cause data fragmentation. Performing shrink operation on tempdb has the following limitations:

  • Shrink operations do not shrink the version store or internal objects. This means that you will not recover space if the internal object or version store page needs to be moved.
  • The DBA might need to restart the server in a single user mode to allow shrinking of the tempdb.

For more information, see How to shrink the tempdb database in SQL Server on the Microsoft Developer Network (MSDN).

Upgrading to SQL Server 2005

When the database is upgraded from a previous release to SQL Server 2005, you may need to adjust the disk space used by tempdb. There are multiple factors that impact the space requirements for tempdb. These are:

  • New features, such as snapshot isolation, MARS, and online indexes, that use the space in tempdb.
  • Query plan changes.
  • Features that did not use tempdb in previous versions, but use tempdb in SQL Server 2005, such as triggers that are based on row versioning and use tempdb to store inserted/deleted rows.

For more information on upgrade recommendations, see SQL Server Books Online.

Best practices and recommendations

Before you upgrade to SQL Server 2005, you may want to follow the steps outlined here to determine the appropriate size of tempdb.

Estimate the size of tempdb:

  • Use your current tempdb size setting as a baseline.
  • Analyze the existing workload.
  • Evaluate required features.
  • Adjust the space for projected concurrent activities.

Create a test environment and monitor tempdb space:

  • Execute individual queries.
  • Run selected workloads.
  • Perform index maintenance operations.
  • Set auto grow to ON for tempdb.

Set the size of tempdb to an appropriate value in the production system:

  • Set auto grow to ON for unplanned exceptions.
  • Use instant file initialization to improve the performance of auto grow operations.

Following are some additional configuration and performance recommendations for tempdb:

  • Create the tempdb database on a fast I/O subsystem. Use disk striping to numerous directly attached disks.
  • Separate the disk space dedicated to tempdb from user databases.
  • Create many files to maximize disk bandwidth and to reduce contention in allocation structures. As a general guideline, create one data file per CPU. Each file should be set to the same size. This enables the proportional fill algorithm to distribute the allocation load uniformly with minimal contention.

Use the following general guidelines when setting the FILEGROWTH increment for tempdb:

tempdb file size FILEGROWTH increment for tempdb
0 to 100 MB 10 MB
100 to 200 MB 20 MB
500 or more 10%

Appendix: A Case Study

This case study illustrates how you can use the DMVs in SQL Server 2005 to monitor tempdb usage over time. An administrator can use the information gathered from monitoring to identify which version stores and/or queries are taking up the most resources in tempdb over time. It is then possible to take corrective action.

The case study is an example of monitoring tempdb space usage in a multi-user workload. This example also demonstrates the effects of versioning on tempdb space usage. The same test case is run under read committed isolation (the default), under read committed snapshot isolation, and under snapshot isolation.

Each action taken within the workload is encapsulated in its own stored procedure. These stored procedures are executed randomly, therefore they might not execute in the same way or in the same order in all three scenarios. While these are random, the relative weight of these stored procedures is the same across all three scenarios.

Machine configuration

Single Processor: 3.0 GHz

RAM: 2 GB

Drive: 100-MB SCSI

Database: 10-MB TPC-H. 1 root file, 1 database file, and 1 log file

Data Space: 29 GB

Log Space: 1 GB

OS: W2K3 SP1

Number of clients: 50

Runtime: 180 minutes prior to allowing existing connections to drain.

SQL Server used: SQL Server 2005

Workload

The following workloads used in the case study are similar to TPC-H workloads. The weighting that is provided is the frequency (stated as a fraction) that the driver procedure will pick a given workload to run. The times and result set sizes for the queries were measured for the initial database under single-user conditions.

sp_takeOrder

Insertion workload. Adds an order and adds one line item.

Weighting 25/48.

sp_deleteOrder

Deletion workload. Deletes an order and deletes any line items associated with

that order.

Weighting 10/48.

sp_updateLineitem

Update workload. Updates a line item for a random order.

Weighting 10/48.

sp_productTypeProfitMeasureQuery

Query workload based off of TPC-H query 9. Allocates space in tempdb.

Weighting 1/48.

Returns 200 rows. Takes approximately 7:00 (mm:ss) to run.

sp_shippingModesAndOrderPriorityQuery

Query workload based off of TPC-H query 12. Allocates space in tempdb.

Weighting 1/48.

Returns 2 rows. Takes approximately 5:23 (mm:ss) to run.

sp_largeVolumeCustomerQuery

Query workload based off of TPC-H query 18. Allocates space in tempdb.

Weighting 1/48.

Result is 14,722 rows. Takes approximately 16:53 (mm:ss) to run.

At any time during the scenario, there are 48 sessions running random workloads. Out of these 48 sessions, there are 25 active sessions executing INSERT operations. Similarly, there are 10 concurrent session doing UPDATES and DELETES. However, the queries are run in one session each. Workloads are run aggressively for an hour—when a stored procedure completes, the next is immediately initiated.

tempdb space usage monitoring

In this scenario, we monitor tempdb by using the DMVs in SQL Server 2005.

To track tempdb space usage over time, we periodically poll DMVs and store the output that is generated by each DMV in a database called the Perf_warehouse. We then run various queries on the Perf_warehouse for analysis.

Following is a sample schema that stores the output from DMVS. This is an example of tracking space in tempdb. You can choose a more elaborate schema that polls data from other sources such as System Monitor counters and stores the results in the performance warehouse.

Performance warehouse schema
CREATE database perf_warehouse
GO
USE perf_warehouse
GO
CREATE TABLE tempdb_space_usage (
  -- This represents the time when the particular row was 
  -- inserted
  dt datetime DEFAULT CURRENT_TIMESTAMP, 
  -- session id of the sessions that were active at the time
  session_id    int DEFAULT null, 
  -- this represents the source DMV of information. It can be 
  -- track instance, session or task based allocation information.
  scope char(7),    
  -- instance level unallocated extent pages in tempdb
  Instance_unallocated_extent_pages bigint,
  -- tempdb pages allocated to verstion store
  version_store_pages    bigint,
  -- tempdb pages allocated to user objects in the instance
  Instance_userobj_alloc_pages bigint,            
  -- tempdb pages allocated to internal objects in the instance
  Instance_internalobj_alloc_pages bigint,
  -- tempdb pages allocated in mixed extents in the instance
  Instance_mixed_extent_alloc_pages bigint,
  -- tempdb pages allocated to user obejcts within this sesssion or task.
  Sess_task_userobj_alloc_pages bigint,            
  -- tempdb user object pages deallocated within this sesssion 
  -- or task.
  Sess_task_userobj_deallocated_pages bigint,
  -- tempdb pages allocated to internal objects within this sesssion 
  -- or task
  Sess_task_internalobj_alloc_pages    bigint,
  -- tempdb internal object pages deallocated within this sesssion or 
  -- task
  Sess_task_internalobj_deallocated_pages bigint,            
  -- query text for the active query for the task    
  query_text    nvarchar(max)    
)
-- Create a clustered index on time column when the data was collected
CREATE CLUSTERED INDEX cidx ON tempdb_space_usage (dt)
tempdb space usage collection

The following stored procedure polls DMVs and inserts data into the table called tempdb_space_usage. You can run this procedure as often as necessary. For our workload, we run it every minute.

CREATE PROC sp_sampleTempDbSpaceUsage AS
  Instance level tempdb File space usage for all files within 
  -- tempdb
  INSERT tempdb_space_usage (
    scope,
    Instance_unallocated_extent_pages,
    version_store_pages,
    Instance_userobj_alloc_pages,
    Instance_internalobj_alloc_pages,
    Instance_mixed_extent_alloc_pages)
  SELECT 
    'instance',
    SUM(unallocated_extent_page_count),
    SUM(version_store_reserved_page_count),
    SUM(user_object_reserved_page_count),
    SUM(internal_object_reserved_page_count),
    SUM(mixed_extent_page_count)
  FROM sys.dm_db_file_space_usage
    
    -- 2. tempdb space usage per session 
    --
  INSERT tempdb_space_usage (
    scope,
    session_id,
    Sess_task_userobj_alloc_pages,
    Sess_task_userobj_deallocated_pages,
    Sess_task_internalobj_alloc_pages,
    Sess_task_internalobj_deallocated_pages)
  SELECT
    'session', 
    session_id,
    user_objects_alloc_page_count,
    user_objects_dealloc_page_count,
    internal_objects_alloc_page_count,
    internal_objects_dealloc_page_count
  FROM sys.dm_db_session_space_usage
    WHERE session_id > 50
    -- 3. tempdb space usage per active task
    --
  INSERT tempdb_space_usage (
    scope,
    session_id,
    Sess_task_userobj_alloc_pages,
    Sess_task_userobj_deallocated_pages,
    Sess_task_internalobj_alloc_pages,
    Sess_task_internalobj_deallocated_pages,
    query_text)
  SELECT 
    'task',
    R1.session_id,
    R1.user_objects_alloc_page_count,
    R1.user_objects_dealloc_page_count,
    R1.internal_objects_alloc_page_count,
    R1.internal_objects_dealloc_page_count,
    R3.text
  FROM sys.dm_db_task_space_usage AS R1
    LEFT OUTER JOIN
    sys.dm_exec_requests AS R2
    ON R1.session_id = R2.session_id 
    OUTER APPLY sys.dm_exec_sql_text(R2.sql_handle) AS R3
  WHERE R1.session_id > 50

tempdb space usage analysis

This is a test scenario based on a TPC-H database. Three of the TPC-H queries were specifically chosen to allocate space in tempdb. Other queries generate DML activity on the base tables.

None of these queries create objects in tempdb, so the user object level queries in the tempdb space usage collection section in this paper are not important in this scenario. All of the sessions that connect to the test server run a procedure, exit, reconnect, and repeat. Therefore, session scope queries are not as important in this scenario. This might not be true in production systems, particularly those running ad-hoc queries.

We use the following queries to analyze tempdb space usage in our workload.

Query1: This query reports the maximum allocated space in tempdb over all the data points collected. You can use this to estimate the size requirements of tempdb for your workload. This query reports tempdb space usage at the instance level.

SELECT
  CONVERT (float, (MAX(version_store_pages +
      Instance_userobj_alloc_pages +
      Instance_internalobj_alloc_pages +
      Instance_mixed_extent_alloc_pages)))/ 128.0
    AS max_tempdb_allocation_MB
FROM     tempdb_space_usage 
WHERE scope = ‘instance’

Query2: This query reports the average allocated space in tempdb over all the data points collected. This query reports average tempdb space usage at the instance level.

SELECT     
  CONVERT (float, (AVG(version_store_pages +
      Instance_userobj_alloc_pages +
      Instance_internalobj_alloc_pages +
      Instance_mixed_extent_alloc_pages)))/ 128.0
    AS avg_tempdb_allocation_MB
FROM tempdb_space_usage 
WHERE scope = ‘instance’

Query3: This query computes the maximum allocated pages and the verison store size in megabytes over all the data points collected. If the amount of tempdb space that is allocated to the version store is large, it implies that long-running transactions are generating or consuming versions.

SELECT     
  MAX(version_store_pages) AS max_version_store_pages_allocated,
  MAX(version_store_pages/128.0) AS max_version_store_allocated_space_MB
FROM tempdb_space_usage 
WHERE scope = ‘instance’

Query4: This query computes the average number of allocated pages and the verison store size in megabytes over all the data points collected.

SELECT
  AVG(version_store_pages) AS max_version_store_pages_allocated,
  AVG(version_store_pages)/ 128.0 AS max_version_store_allocated_space_MB
FROM tempdb_space_usage 
WHERE scope = ‘instance’

Results

tempdb space usage in the instance:

            Maximum        Average
Read Committed:    2232.375 MB        996.4296875 MB
RCSI:            2161.5 MB        1029.609375 MB
Snapshot:        2261.4375 MB    1031.2421875 MB

Version store space used:

            Maximum        Average
Read Committed:    0 MB            0 MB
RCSI:            2.312500 MB        1.546875 MB
Snapshot:        3.687500 MB        2.023437 MB

This particular workload incurs only small a space penalty for storing the row versions. Chances are that the spooling queries have a greater effect on tempdb space usage than does the isolation level.

Now, let us examine the amount of tempdb space used by tasks. Note that the query_text field is truncated to better fit the page and NULL is ignored. Since there are no explicit user objects created in tempdb, we only monitor tempdb space used by internal objects.

Query 5: This query shows the top five queries that are allocating the most pages for internal objects.

SELECT top 5 MAX ((Sess_task_internalobj_alloc_pages) - (Sess_task_internalobj_deallocated_pages))
  AS Max_Sess_task_allocated_pages_delta,     query_text
FROM tempdb_space_usage 
WHERE scope = 'task' and session_id > 50
GROUP BY query_text
ORDER BY Max_Sess_task_allocated_pages_delta  DESC

Query 6: This query shows the top five queries that are allocating the most pages for internal objects on average.

SELECT top 5 AVG ((Sess_task_internalobj_alloc_pages) - (Sess_task_internalobj_deallocated_pages))
  AS Avg_Sess_task_allocated_pages_delta, query_text
FROM tempdb_space_usage 
WHERE scope = 'task' and session_id > 50
GROUP BY query_text
ORDER BY Avg_Sess_task_allocated_pages_delta  DESC

Results

The following tables show the amount of tempdb space that was used by various stored procedures.

Read Committed:

Query                                                             Maximum        Average

Create proc sp_largeVolumeCustomerQuery    84952                6660

Create proc sp_productTypeProfitMeasureQuery   32288                755

Create proc sp_shippingModesAndOrderPriority…  672                   15

CREATE PROC sp_sampleTempDbSpaceUsage  24                      3

Create proc sp_deleteOrder                             8                       0

RCSI:

Query                                                             Maximum        Average

Create proc sp_largeVolumeCustomerQuery    85320                7847

Create proc sp_productTypeProfitMeasureQuery   31608                209

Create proc sp_shippingModesAndOrderPriority…  672                   14

CREATE PROC sp_sampleTempDbSpaceUsage  32                      5

Create proc sp_deleteOrder                             8                       0

Snapshot:

Query                                                             Maximum        Average

Create proc sp_largeVolumeCustomerQuery    83696                7024

Create proc sp_productTypeProfitMeasureQuery   32288                268

Create proc sp_shippingModesAndOrderPriority…  152                   14

CREATE PROC sp_sampleTempDbSpaceUsage  24                      1

Create proc sp_deleteOrder                             8                       0

This output can be used to identify which queries consume the most space in tempdb to store internal objects. In this particular scenario, a significant space penalty is not incurred when storing row versions. It is also possible that some of the variance is a function of the sampling interval.

Summary

This case study shows one method of monitoring workloads. The actual tempdb space usage that is due to RCSI or snapshot isolation is highly dependent on the specific server workloads. In our test workload, the main usage of tempdb is due to spooling.

To better evaluate throughput and to find out which isolation level works best for your workload, you can combine your tempdb space analysis with SQL Profiler traces.

For More Information

http://www.microsoft.com/technet/prodtechnol/sql/default.mspx

Download

Cc966545.icon_Word(en-us,TechNet.10).gif WorkingWithTempDB.doc
327 KB
Microsoft Word file
Get Office File Viewers

Working with tempdb in SQL Server 2005

HOW TO CONVERT FROM STRING TO DATE?

Execute the following Microsoft SQL Server T-SQL scripts in Management Studio Query Editor to demonstrate the conversion from string to date(DATE, DATETIME, SMALLDATETIME).

When a conversion involves month or day name, it is language setting dependent, therefore non-deterministic. The week function is also non-deterministic because it depends on the first date setting for the week (default in sys.syslanguages table or override by SET DATEFIRST).

USE AdventureWorks

SET LANGUAGE us_english

— Convert string to date using style (format) numbers – sql dates format

— SQL convert text to date – SQL convert string to date / datetime

SELECT convert(datetime,’15/03/18′,3) — 2018-03-15 00:00:00.000

SELECT convert(datetime,’15.03.18′,4) — 2018-03-15 00:00:00.000

— Convert datetime to text style (format) list – sql time format

— SQL Server without century (YY) date styles (there are exceptions!)

Generally adding 100 to style number results in century format CCYY / YYYY

SELECT convert(varchar,getdate())    — Mar 15 2018 10:35AM

SELECT convert(varchar,getdate(),0)  — Mar 15 2018 10:35AM

SELECT convert(varchar,getdate(),1)  — 03/15/18

SELECT convert(varchar,getdate(),2)  — 18.03.15

SELECT convert(varchar,getdate(),3)  — 15/03/18

SELECT convert(varchar,getdate(),4)  — 15.03.18

SELECT convert(varchar,getdate(),5)  — 15-03-18

SELECT convert(varchar,getdate(),6)  — 15 Mar 18

SELECT convert(varchar,getdate(),7)  — Mar 15, 18

SELECT convert(varchar,getdate(),8)  — 10:39:39

SELECT convert(varchar,getdate(),9)  — Mar 15 2018 10:39:48:373AM

SELECT convert(varchar,getdate(),10) — 03-15-18

SELECT convert(varchar,getdate(),11) — 18/03/15

SELECT convert(varchar,getdate(),15) — 180315

SELECT convert(varchar,getdate(),13) — 15 Mar 2018 10:41:07:590

SELECT convert(varchar,getdate(),14) — 10:41:25:903

SELECT convert(varchar,getdate(),20) — 2018-03-15 10:43:56

SELECT convert(varchar,getdate(),21) — 2018-03-15 10:44:04.950

SELECT convert(varchar,getdate(),22) — 03/15/18 10:44:50 AM

SELECT convert(varchar,getdate(),23) — 2018-03-15

SELECT convert(varchar,getdate(),24) — 10:45:45

SELECT convert(varchar,getdate(),25) — 2018-03-15 10:46:11.263

— T-SQL with century (YYYY or CCYY) datetime styles (formats)

SELECT convert(varchar, getdate(), 100) — Oct 23 2016 10:22AM (or PM)
SELECT convert(varchar, getdate(), 101) — 10/23/2016

SELECT convert(varchar, getdate(), 102) — 2016.10.23

SELECT convert(varchar, getdate(), 103) — 23/10/2016

SELECT convert(varchar, getdate(), 104) — 23.10.2016

SELECT convert(varchar, getdate(), 105) — 23-10-2016

SELECT convert(varchar, getdate(), 106) — 23 Oct 2016

SELECT convert(varchar, getdate(), 107) — Oct 23, 2016

SELECT convert(varchar, getdate(), 108) — 09:10:34

SELECT convert(varchar, getdate(), 109) — Oct 23 2016 11:10:33:993AM (or PM)

SELECT convert(varchar, getdate(), 110) — 10-23-2016

SELECT convert(varchar, getdate(), 111) — 2016/10/23

SELECT convert(varchar, getdate(), 112) — 20161023

SELECT convert(varchar, getdate(), 113) — 23 Oct 2016 06:10:55:383

SELECT convert(varchar, getdate(), 114) — 06:10:55:383(24h)

SELECT convert(varchar, getdate(), 120) — 2016-10-23 06:10:55(24h)

SELECT convert(varchar, getdate(), 121) — 2016-10-23 06:10:55.383

SELECT convert(varchar, getdate(), 126) — 2016-10-23T06:10:55.383

GO

— SQL cast string to datetimetime part 0 – sql hh mm

— SQL Server cast string to DATE (SQL Server 2008 feature) – sql yyyy mm dd

SELECT [Date] =     CAST(‘20120228’ AS date)         — 2012-02-28

SELECT [Datetime] = CAST(‘20120228’ AS datetime)      — 2012-02-28 00:00:00.000

SELECT [Datetime] = CAST(‘20120228’ AS smalldatetime) — 2012-02-28 00:00:00

— SQL convert string to datetime – time part 0

— SQL Server convert string to date – sql times format

SELECT [Datetime] = CONVERT(datetime,’2010-02-28′)

SELECT [Datetime] = CONVERT(smalldatetime,’2010-02-28′)

SELECT [Datetime] = CAST(‘Mar 15, 2010’ AS datetime)

SELECT [Datetime] = CAST(‘Mar 15, 2010’ AS smalldatetime)

SELECT [Datetime] = CONVERT(datetime,’Mar 15, 2010′)

SELECT [Datetime] = CONVERT(smalldatetime,’Mar 15, 2010′)

SELECT [Datetime] = CAST(‘Mar 15, 2010 12:07:34.444’ AS datetime)

SELECT [Datetime] = CAST(‘Mar 15, 2010 12:07:34.444’ AS smalldatetime)

SELECT [Datetime] = CONVERT(datetime,’Mar 15, 2010 12:07:34.444′)

SELECT [Datetime] = CONVERT(smalldatetime,’Mar 15, 2010 12:07:34.444′)

SELECT [Datetime] = CAST(‘2010-02-28 12:07:34.444’ AS datetime)

SELECT [Datetime] = CAST(‘2010-02-28 12:07:34.444’ AS smalldatetime)

SELECT [Datetime] = CONVERT(datetime,’2010-02-28 12:07:34.444′)

SELECT [Datetime] = CONVERT(smalldatetime,’2010-02-28 12:07:34.444′)

— Double conversion

SELECT [Datetime] = CAST(CAST(getdate() AS VARCHAR) AS datetime)

SELECT [Datetime] = CAST(CAST(getdate() AS VARCHAR) AS smalldatetime)

SELECT [Datetime] = CONVERT(datetime,convert(varchar,getdate()))

SELECT [Datetime] = CONVERT(smalldatetime,convert(varchar,getdate()))

————

— MSSQL convert date string to datetime – time is set to 00:00:00.000 or 12:00AM

PRINT CONVERT(datetime,’07-10-2016′,110)        — Jul 10 2016 12:00AM

PRINT CONVERT(datetime,’2016/07/10′,111)        — Jul 10 2016 12:00AM

PRINT CONVERT(varchar,CONVERT(datetime,’20160710′,  112),121)

— 2016-07-10 00:00:00.000

————

— Selected named date styles

DECLARE @DateTimeValue varchar(32)

— US-Style

— Convert string to datetime sqlsql convert string to datetime

SELECT @DateTimeValue = ’10/23/2016′

SELECT StringDate=@DateTimeValue,

[US-Style] = CONVERT(datetime, @DatetimeValue)

SELECT @DateTimeValue = ’10/23/2016 23:01:05′

SELECT StringDate = @DateTimeValue,

[US-Style] = CONVERT(datetime, @DatetimeValue)

— UK-Style, British/French

SELECT @DateTimeValue = ’23/10/16 23:01:05′

SELECT StringDate = @DateTimeValue,

[UK-Style] = CONVERT(datetime, @DatetimeValue, 3)

SELECT @DateTimeValue = ’23/10/2016 04:01 PM’

SELECT StringDate = @DateTimeValue,

[UK-Style] = CONVERT(datetime, @DatetimeValue, 103)

— German-Style

SELECT @DateTimeValue = ‘23.10.16 23:01:05’

SELECT StringDate = @DateTimeValue,

[German-Style] = CONVERT(datetime, @DatetimeValue, 4)

SELECT @DateTimeValue = ‘23.10.2016 04:01 PM’

SELECT StringDate = @DateTimeValue,

[German-Style] = CONVERT(datetime, @DatetimeValue, 104)

— Double conversion to US-Style 107 with century: Oct 23, 2016

SET @DateTimeValue=’10/23/16′

SELECT StringDate=@DateTimeValue,

[US-Style] = CONVERT(varchar, CONVERT(datetime, @DateTimeValue),107)

— SQL dateformat setting

USE AdventureWorks2008;

SELECT convert(datetime,’14/05/08′)

/* Msg 242, Level 16, State 3, Line 1

The conversion of a varchar data type to a datetime data type resulted

in an out-of-range value.

*/

SET DATEFORMAT ymd

SELECT convert(datetime,’14/05/08′)   — 2014-05-08 00:00:00.000

— Setting DATEFORMAT to UK-Style

SET DATEFORMAT dmy

SELECT convert(datetime,’20/05/14′)   — 2014-05-20 00:00:00.000

— Setting DATEFORMAT to US-Style

SET DATEFORMAT mdy

SELECT convert(datetime,’05/20/14′)   — 2014-05-20 00:00:00.000

SELECT convert(datetime,’05/20/2014′) — 2014-05-20 00:00:00.000
GO

————

— SQL date & time eliminating dividing characters

————

— MSSQL replace string function

— T-SQL string concatenate (+)

USE AdventureWorks2008;

SELECT replace(convert(VARCHAR(10),getdate(),102),’.’,”)

— 20120315

SELECT replace(convert(VARCHAR(10),getdate(),111),’/’,”)

— 20120315

— SQL triple replace

SELECT replace(replace(replace(convert(VARCHAR(25),

getdate(),20),’-‘,”), ‘:’,”),’ ‘,”)

— 20120529090427

— T-SQL concatenating from a date and a time conversion

SELECT replace(convert(VARCHAR(10),getdate(),111),’/’,”) +

replace(convert(VARCHAR(8),getdate(),108),’:’,”)

— 20120315085654

————

— Converting string dates from a table

————

— Create and populate a test table with a string date

USE tempdb;

SELECT

DepartmentID,

LastUpdate=CONVERT(varchar,

dateadd(day, DepartmentID, ModifiedDate),100)

INTO DeptInfo

FROM AdventureWorks.HumanResources.Department

SELECT * FROM DeptInfo

/* Partial results

DepartmentID      LastUpdate

1                       Jun  2 1998 12:00AM

2                       Jun  3 1998 12:00AM

*/

— Convert string date column to datetime

SELECT

DepartmentID,

LastChangeDate=convert(datetime, LastUpdate)

FROM DeptInfo

/* Partial results

DepartmentID            LastChangeDate

1                       1998-06-02 00:00:00.000

2                       1998-06-03 00:00:00.000

*/

DROP TABLE DeptInfo

GO

The BEST 70-461 SQL Server 2012 Querying Exam Prep Book!

——————————————————-

— Casting string date & time together and separately
——————————————————-

— SQL cast string to datetime

SELECT CAST(‘20100315 16:40:31’ AS datetime)

— Result: 2010-03-15 16:40:31.000

— SQL cast string to date – time part 0

SELECT CAST(‘20100315’ AS datetime)

— Result: 2010-03-15 00:00:00.000

— SQL cast string to time – date part 1900-01-01

SELECT CAST(’16:40:31′ AS smalldatetime)

— Result: 1900-01-01 16:41:00

————

— SQL DATEDIFF with string date

————

DECLARE @sDate varchar(10)

SET @sDate = ‘2010/03/15’

— DATEDIFF (delta) between two dates in months

SELECT GETDATE(), DATEDIFF (MONTH, GETDATE(), @sDate)

SELECT GETDATE(), DATEDIFF (MONTH, GETDATE(), CAST(@sDate as datetime))

SELECT GETDATE(), DATEDIFF (MONTH, GETDATE(), CONVERT(datetime,@sDate))

SELECT GETDATE(), DATEDIFF (MONTH, GETDATE(), CONVERT(datetime,@sDate,111))

Seme results for above: 2008-12-29 11:04:51.097    15

— SQL convert to datetime with wrong style (111 correct, 112 incorrect)

SELECT GETDATE(), DATEDIFF (MONTH, GETDATE(), CONVERT(datetime,@sDate,112))

/* ERROR

Msg 241, Level 16, State 1, Line 11

Conversion failed when converting date and/or time from character string.

*/

————

————

— SQL Server date string search guidelines – comparing dates

————

— Date equal search

DECLARE @Date1 datetime, @Date2 datetime, @Date3 datetime

SET @Date1 = ‘2012-01-01’

SET @Date2 = ‘2012-01-01 00:00:00.000’

SET @Date3 = ‘2012-01-01 11:00’

SELECT @Date1, @Date2, @Date3

— Date-only @Date1 is translated to datetime

— 2012-01-01 00:00:00.000    2012-01-01 00:00:00.000  2012-01-01 11:00:00.000

— The following is a datetime comparison, not a date-only comparison

IF (@Date1 = @Date2) PRINT ‘EQUAL’ ELSE PRINT ‘NOT EQUAL’

— EQUAL

— Equal test fails because time parts are different

IF (@Date1 = @Date3) PRINT ‘EQUAL’ ELSE PRINT ‘NOT EQUAL’

— NOT EQUAL

— The string date implicitly converted to datetime for the equal test

IF (‘2012-01-01’ = @Date3) PRINT ‘EQUAL’ ELSE PRINT ‘NOT EQUAL’

— NOT EQUAL

— Safe way to search for a specific date

SELECT COUNT(*) FROM AdventureWorks.Sales.SalesOrderHeader

WHERE ‘2004/02/01’ = CONVERT(varchar, OrderDate,111)

— 244

— Equivalent to

SELECT COUNT(*) FROM AdventureWorks.Sales.SalesOrderHeader

WHERE OrderDate BETWEEN ‘2004/02/01  00:00:00.000’ AND ‘2004/02/01 23:59:59.997’

— 244

— Safe way to search for a specific date range

SELECT COUNT(*) FROM AdventureWorks.Sales.SalesOrderHeader

WHERE CONVERT(varchar, OrderDate,111) BETWEEN ‘2004/02/01’ AND ‘2004/02/14’

— 1059

— Equivalent to

SELECT COUNT(*) FROM AdventureWorks.Sales.SalesOrderHeader

WHERE OrderDate BETWEEN ‘2004/02/01 00:00:00.000’ AND ‘2004/02/14 23:59:59.997’

— 1059

SELECT COUNT(*) FROM AdventureWorks.Sales.SalesOrderHeader

WHERE OrderDate >= ‘2004/02/01 00:00:00.000’

AND OrderDate <  ‘2004/02/15 00:00:00.000’

— 1059

————

————

— SQL Server convert from string to smalldatetime

————

— T-SQL convert from format mm/dd/yyyy to smalldatetime

SELECT CONVERT(smalldatetime, ’10/23/2016′, 101)

— 2016-10-23 00:00:00

— MSSQL convert from format dd/mm/yyyy to smalldatetime

SELECT CONVERT(smalldatetime, ’23/10/2016′, 103)

— 2016-10-23 00:00:00

— Month 23 is out of range

SELECT CONVERT(smalldatetime, ’23/10/2016′, 101)

/* Msg 242, Level 16, State 3, Line 1

The conversion of a varchar data type to a smalldatetime data type resulted

in an out-of-range value.

*/

————

— Translate/convert string/text hours and minutes to seconds

————

DECLARE @TimeStr varchar(16) = ’20:49:30′

SELECT   PARSENAME(REPLACE(@TimeStr,’:’,’.’),1)

+ PARSENAME(REPLACE(@TimeStr,’:’,’.’),2) * 60

+ PARSENAME(REPLACE(@TimeStr,’:’,’.’),3) * 3600

— 74970

————

from: http://sqlusa.com/bestpractices2005/sqlserverstringtodate/

HOW TO CONVERT FROM STRING TO DATE?

Result from Wolfram Alpha

Assuming “20/09/1979” is a date | Use “20/09” as referring to math instead

Input interpretation:

Date formats:

Time difference from today (Monday, September 8, 2014):




Time in 1979:


Observances for September 20, 1979 (Indonesia):

Anniversaries for September 20, 1979:

Daylight information for September 20, 1979 in Jakarta:

Phase of the Moon:

Result from Wolfram Alpha

SQL Server 2000: TempDB Disk is Full !!

Welcome to the Database World...

Today I started my day with TempDB Disk Full alerts in my inbox for one of the SQL Server 2000 Production databases. Only 5GB space left on the disk where TempDB files reside. As it is one of the crucial server so I did not want to restart the SQL Server Instance as it is one of the easiest approach to free up the TempDB size as TempDB is created every time SQL Server Instance is started. But due to the business need restarting the SQL Server had to be the last option.

As it was SQL Server 2000 instance so the available options to us is little limited. So at first I wanted to SHRINK the log file that was around 98% FULL. I used the following command:

USE tempdb
GO
DBCC SHRINKFILE (‘templog’, 1024)

The command ran successfully. But there was no change in database size.

So then…

Lihat pos aslinya 168 kata lagi

SQL Server 2000: TempDB Disk is Full !!

13 Nasihat Keuangan Dari Para Ahlinya

Nasihat bisa datang dari mana saja. Namun, untuk nasihat keuangan, tentu Anda harus mendengarkannya langsung dari orang yang ahli keuangan maupun orang yang sukses secara finansial. Siapa tahu dengan mengikuti nasihat yang mereka berikan, Anda pun bisa sesukses mereka. Berikut ini adalah 13 nasihat keuangan berharga yang diberikan oleh lima orang yang berhasil secara finansial.

Li Ka-shing (Kekayaan US$ 31 miliar)

Nasihat Li Ka-shing

Miliuner dan salah satu orang terkaya di Asia ini pada masa kecilnya tidak lulus sekolah. Namun, sekarang kekayaang Li Ka-shing tersebar di 52 negara dan mempekerjakan lebih dari 270.000 orang. Berikut ini adalah lima nasihat keuangan darinya:

#1 Hidup bersahaja

Ketika Anda mulai hidup dengan sukses, tetaplah hidup hemat dan tidak perlu makan-makanan mewah. Li berkata, “Ketika masih muda, tubuh Anda tidak akan memiliki banyak masalah untuk beberapa tahun ke depan”. Li mencontohkan, seseorang sebaiknya hanya mengeluarkan uang RMB 600 (Rp 1,1 juta) untuk biaya hidup per bulan.

#2 Perluas jaringan

Perbanyaklah teman dan perluas teman-teman dekat dengan mentraktir makan orang-orang yang lebih pintar dan lebih kaya daripada Anda, atau orang yang membantu karir Anda. Hal tersebut harus Anda lakukan tiap bulan agar Anda semakin diingat oleh mereka. Sebagai contoh, Anda dapat menyisihkan RMB 400 (Rp 760.000) untuk memperluas jaringan atau pertemanan.

#3 Jangan berhenti belajar

Sisihkan uang untuk kebutuhan personal. Setidaknya tiap bulan sisihkan uang (RMB 300/Rp 570.000) untuk menambah pengetahuan Anda, misalnya dengan membeli buku atau mengikuti pelatihan.

#4 Berlibur

Beri diri Anda penghargaan dengan liburan, minimal satu kali dalam setahun. Hal itu akan memberikan pengalaman berbeda juga untuk memotivasi Anda agar tetap semangat bekerja. Sisihkan RMB 200 (Rp 380.000) tiap bulan untuk digunakan berlibur pada akhir tahun.

#5 Investasi untuk masa depan

Sisihkan sejumlah uang tiap bulannya hingga terkumpul uang untuk memulai bisnis kecil. Investasi berarti juga mengamankan uang yang Anda miliki untuk masa depan. Untuk awalnya, sisihkan RMB 500 (Rp 950.000) per bulan untuk investasi.

Periksa juga alasan Investasi properti di Indonesia semakin meningkat.

Robert Kuok (Kekayaan US$ 11,5 miliar)

Nasihat Robert Kuok

Orang terkaya di Malaysia, dan juga dikenal dengan Sugar King Asia, Robert Kuok hidup dengan mengikuti nasihat-nasihat dari ibunya, yakni jangan serakah, jangan mengambil keuntungan dari orang lain, dan harus bermoral ketika menghasilkan uang.

#1 Menangkap kesempatan (walaupun orang-orang meragukannya)

Kuok merupakan orang yang senang memaksimalkan kesempatan ketika ada peluang. Orang-orang pernah meragukannya ketika ia mulai berbisnis gula, sebab bisnis gula adalah bisnis yang membosankan. Namun, yang ia lihat pada saat itu hanyalah kesempatan, dan ia pun memaksimalkannya.

#2 Menghargai kualifikasi yang berharga

Dalam merekrut karyawan, Robert Kuok selalu menghargai kualifikasi kejujuran, kerja keras, dan kecerdasan. Ia menempatkan ketiga kualifikasi tersebut di atas jabatan maupun kualifikasi di dalam kertas.

Jack Ma (Kekayaan US$ 10 miliar)

Nasihat keuangan

Jack Ma, pendiri dan mantan CEO Alibaba Group, adalah seorang miliuner mandiri yang percaya bahwa perilaku dan kemampuan mengambil keputusan dari seseorang adalah lebih penting daripada keahlian yang dimiliki.

#1 Pelanggan adalah nomor satu

Jack Ma menyatakan bahwa pelanggan harus selalu nomor satu, karyawan adalah nomor dua, dan pemegang saham adalah nomor ketiga.

#2 Cepat beradaptasi

Pengusaha harus cepat beradaptasi dan berubah sebelum tren baru hadir, dan kemampuan untuk melihat kesempatan yang tidak dapat dilihat oleh orang lain merupakan kesempatan yang sesungguhnya.

#3 Belajar dari kesalahan

Jack Ma pernah berkata kepada 18 orang temannya dalam sebuah perjalanan di tahun 2001 bahwa pria yang belajar dari kesalahannya dapat meniti karir hingga level manajerial, sedangkan untuk posisi wakil presiden dan posisi senior lainnya hanya didapat dengan cara direkrut oleh perusahaan lain. Setahun kemudian, orang-orang yang pernah ia rekrut pindah ke tempat lain untuk menjadi wakil presiden maupun direktur.

Richard Branson (Kekayaan US$ 5 miliar)

Nasihat Richard Branson

Richard Branson menjadi pendiri Virgin (perusahaan rekaman) pada usia 20 tahun. Ia juga pernah menjadi pramugara. Richard Branson membuktikan bahwa ia dapat melakukan apa pun walaupun tidak memiliki gelar sarjana bisnis.

#1 Bangga terhadap yang Anda lakukan

Branson menyatakan bahwa kesuksesan yang ia raih karena ia selalu mengikuti aturan sederhana, yakni menghasilkan sesuatu yang dapat membuat Anda bangga. Baginya, membuat sebuah bisnis adalah membuat sesuatu yang dapat membuat bangga, membawa orang-orang berbakat untuk kerja sama, dan menghasilkan sesuatu yang dapat memberikan perbedaan untuk hidup seseorang.

#2 Tidak ada yang sempurna

Branson juga menyatakan bahwa kesempurnaan itu sulit dicapai. Ia percaya bahwa orang yang paling pintar sekali pun pasti masih memiliki ruang untuk berkembang. Ia juga mengatakan bahwa setiap orang yang sudah merasa sempurna akan berujung pada kemalasan.

Donald Trump (Kekayaan US$ 3,9 miliar)

Nasihat keuangan Donald TrumpDonald Trump merupakan konglomerat real-estate dan televisi. Daftar ini tidak akan lengkap tanpa nasihat keuangan darinya.

#1 Tekun untuk meraih kesuksesan

Dari semua nasihat yang Donald Trump dapat berikan, satu yang terpenting dan sangat mendefinisikan ia adalah ketekunan. Trump membuktikan bahwa semangat pantang menyerah akan dapat melewati segala rintangan. Ia pun mencapai kesuksesan seperti sekarang ini setelah melewati beberapa kali masa bangkrut, baik dari segi bisnis maupun personal. Ia pernah di ujung kebangkrutan secara pribadi pada tahun 1989.

13 Nasihat Keuangan Dari Para Ahlinya