Ssis-moving-average

Ssis-moving-average

Trading-system-test-cases
Pindah-rata-rata-crossover-setting
Sharekhan-online-trading-brokerage-charges


Proc-arima-moving-average Restricted-stock-vs-options-startup Moving-average-21-55 Strategis-pelatihan-rencana-template Pilihan-trading-course-in-mumbai Option-volatility-trading-pdf

Mengimpor Data SQL Server Menggunakan SSIS - Opsi Yang Tercepat Oleh: Daniel Calbimonte Baca Komentar (27) Tip Terkait: Pengembangan Layanan Integrasi Lebih Banyak Artikel ini berguna bagi pengembang SSIS yang tidak mengetahui tugas mana yang terbaik untuk digunakan dalam proyek SSIS. Masalah utamanya adalah bahwa pada akhir pembangunan jika kinerja lambat maka Anda perlu membangun kembali proyek dan mengubah komponen. Artikel ini menunjukkan berbagai cara untuk mengimpor data dan menunjukkan jenis komponen yang terbaik dalam SSIS. Kontesnya adalah antara komponen berikut: Tugas ODBC Tugas ADO NET Tugas OLEDB Tugas SQL Server Tugas T-SQL Saya membuat paket SSIS yang berbeda untuk menguji kinerja. Dalam demo ini saya menggunakan SSIS 2012 dan database Adventureworks 2012. Dalam demo ini saya akan mengimpor tabel AdventureWorks2012.Sales.SalesOrderDetail ke database test2 yang berada pada instance SQL Server yang sama. SalesOrderDetails adalah tabel dengan lebih banyak baris di AdventureWorks2012. Untuk membuat database test2 dan tabel tujuan dbo.OrderDetails, gunakan kode T-SQL ini: Test 1 - ODBC Tasks Contoh pertama akan menggunakan ODBC Source dan ODBC Destination seperti gambar di bawah ini: Ketika kita menjalankan paket yang kita perhatikan rata-rata Waktu adalah 5 menit 57 detik untuk mengimpor baris: Test 2 - ADO NET Tasks Seperti yang diperhatikan, ODBC sangat lambat. Mari mencoba pendekatan lain. Kita akan memotong tabel tujuan terlebih dahulu: Mari kita mencoba ADO untuk mengimpor data yang sama dan memastikan apakah komponen ini lebih cepat: Waktu yang telah berlalu dalam pengujian saya adalah 11 detik. Ini jauh lebih baik. Uji 3 - Tugas OLEDB Kali ini kita akan mengimpor data yang sama dengan menggunakan OLEDB Tasks. Sekali lagi kita akan memotong tabel di database test2 terlebih dahulu. Waktu rata-rata yang berlalu adalah 5 detik. Perhatikan bahwa saya menggunakan opsi beban cepat dengan pilihan Table Lock di Tugas Tujuan OLE DB: Jika kita tidak menggunakan opsi beban cepat, waktu yang dilewati rata-rata adalah 2 menit dan 21 detik: Baiklah. Pilihan beban cepat benar-benar meningkatkan kinerja. Saya akan kembali ke konfigurasi itu. Bagaimana dengan Sumber OLE DB. Secara default saya menggunakan pilihan Tabel atau tampilan di Source OLE DB seperti yang ditunjukkan di bawah ini: Mari kita gunakan Perintah SQL sebagai gantinya seperti yang ditunjukkan di bawah ini. Waktu rata-rata yang berlalu adalah 2,85 detik. Uji 4 - Tujuan SQL Server Sekarang, mari kita coba menggunakan Tujuan SQL sebagai tujuan dan bukan Tujuan OLE DB: Waktu yang dilalui rata-rata adalah 2,5 detik. Pada titik ini adalah pilihan terbaik. Uji 5 - Jalankan T-SQL Task Akhirnya, beberapa orang berpikir bahwa pilihan terbaik adalah dengan menggunakan Tugas Jalankan T-SQL: Saya menggunakan sebuah pernyataan insert sederhana untuk mengimpor data dari satu sumber ke sumber lainnya: Waktu yang rata-rata berlalu adalah 1,8 detik Akhirnya saya diberitahu bahwa jika query berjalan di dalam prosedur tersimpan, ini lebih cepat lagi: Mari membuat prosedur tersimpan: Setelah membuat prosedur tersimpan, kita akan memanggilnya di Tugas T-SQL Execute: Waktu yang rata-rata berlalu adalah 2,12 detik . Prosedur yang tersimpan tidak memperbaiki kinerja. Mari kita tinjau tabel dengan hasilnya: Anda mungkin berpikir bahwa moral dari cerita ini adalah dengan menggunakan Tugas Jalankan T-SQL daripada tugas SSIS lainnya. Dalam contoh ini kami mengimpor data pada instance yang sama, namun ini tidak akan selalu terjadi. Jadi, semangat ceritanya adalah bahwa ada banyak alternatif saat membuat proyek SSIS dan kita harus mempelajari alternatif dengan hati-hati dalam berbagai skenario. Ada alat SSIS yang hebat dan kami tidak selalu menggunakan pilihan terbaik. Dengan setiap versi baru tugas baru SSIS ditambahkan dan kinerja dapat ditingkatkan dengan tugas yang ada. Perubahan utama dalam SSIS untuk SQL 2008 dan 2012 terkait dengan peningkatan kinerja. Langkah Berikutnya Jika Anda bekerja dalam proyek SSIS pastikan Anda menggunakan tugas terbaik dan juga memverifikasi apakah ada tugas SSIS lain yang dapat digunakan dalam proyek Anda. Juga pastikan Anda mengikuti praktik terbaik yang direkomendasikan oleh para ahli: Update Terakhir: 7132012 Bacaan dan analisis yang hebat, namun saya memiliki satu pengecualian untuk ditambahkan. Jika Anda perlu memindahkan sejumlah besar data, Anda perlu mengatur pertumbuhan log transaksi. Ini bukan masalah besar menggunakan SSIS. Sebagai contoh, saya perlu memindahkan 1,3 miliar baris (15 kolom) dan mulai menggunakan TSQL yang dengan cepat mengisi log saya. Namun, dengan menggunakan Sumber dan Tujuan OLE DB (Sisipan Massal) dengan beban cepat, hanya ada sedikit dampak pada file log. Kamis, 20 September 2012 - 9:19:12 AM - vinodhkumar Its sangat berguna. Pekerjaan yang bagus. Terima kasih Senin, 27 Agustus 2012 - 10:54:42 AM - Orlando Colamatteo Saya setuju dengan beberapa orang lain bahwa testbed itu sedikit dibikin. Jika Anda ingin memindahkan data dari satu meja ke meja lainnya pada instance yang sama maka SSIS jarang akan menjadi pilihan yang tepat. Beberapa bentuk T-SQL hampir pasti akan mengungguli operasi SSIS. Skenario yang lebih realistis adalah memindahkan data antara dua sumber data yang berbeda. Ini mengesalkan betapa buruknya Tujuan ODBC, terutama mengingat apa yang telah dikatakan Microsoft secara terbuka bahwa mereka akan beralih dari antarmuka OLE DB dan melakukan standarisasi ODBC di produk masa depan: Di ODBC Destination, saya mengharapkan Microsoft untuk menerapkan pemuatan Data melalui API beban massal seperti yang mereka lakukan dengan opsi FastLoad dari Tujuan OLE DB. Pada catatan terpisah mengenai pemuatan data ke MySQL dengan SSIS: Dulu saya melakukan beberapa tes kinerja dengan driver Cherry City OLE DB untuk MySQL dan ini sangat lambat karena hanya memasukkan satu baris pada satu waktu. Ini belum lagi fakta bahwa ia menabrak ANAK-ANAK secara teratur saat mengembangkannya. Mengingat kurangnya keuntungan, saya akan tetap menggunakan alat yang terpasang pada SSIS dan menghindari kerumitan menginstal dan mengkonfigurasi driver pihak ketiga. Jika Anda menggunakan SSIS 2005, saya akan merekomendasikan penggunaan Komponen Script sebagai Tujuan dan mengeluarkan penyisipan batch terhadap koneksi yang dibuat menggunakan Driver ODBC MySQL: msdn.microsoften-uslibraryms135939.aspx Jika Anda menggunakan SSIS 2008, saya akan merekomendasikan penggunaan Tujuan ADO NET Dengan MySQL ODBC Driver. Dalam pengujian saya hanya mampu mencapai sekitar 240 throughput rowsminute ke MySQL yang cukup mengecewakan: msdn.microsoften-uslibrarybb895291 (vsql.105) .aspx Jika Anda menggunakan SSIS 2012, saya akan merekomendasikan penggunaan ODBC Destination dengan Driver ODBC MySQL. Dalam pengujian saya, ini mengungguli ADO NET Destination lebih dari 3 sampai 1 namun masih hanya mencapai sekitar 800 rowsminute throughput, yang masih cukup mengecewakan: msdn.microsoften-uslibraryhh758691 (vsql.110) .aspxPendahuluan Dengan diluncurkannya SQL Server 2016 Service Pack 1 Teknologi In-Memory ColumnStore sekarang juga tersedia di Standard, Web dan bahkan Express dan LocalDB Editions. Selain manfaat hanya 1 basis kode yang harus dipertahankan, perubahan kebijakan ini juga akan menjadi ruang penyimpanan disk yang jelas karena rasio de-duplikasi dan rasio data yang tinggi dan, yang terakhir namun tidak kalah pentingnya, juga merupakan kinerja kueri ad-hoc yang serius. Booster Perbedaan utama antara rasa SQL adalah berapa banyak daya CPU dan memori dialokasikan untuk tugas seperti (re-) building dari Clustered ColumnStore Index. Sebagai contoh: dengan Edisi Standar satu inti (waktu prosesor 100 dari proses sqlservr) sedang digunakan dan query CCI terjadi dengan maksimal 2 CPU (MAXDOP2), versus memanfaatkan semua CPU yang ada di Edisi Enterprise. Membangun Clustered ColumnStore Index (CCI) dengan SQL Server 2016 Standard Edition: Membangun CCI dengan semua 4 core yang tersedia dengan SQL Server 2016 Enterprise Edition: Waktu dasar untuk memuat 7.2 GB 60 Juta baris dari satu file TPCH lineItem tidak menunjukkan banyak hal. Perbedaan antara rasa saat Massal memasukkan data langsung ke meja tumpukan atau meja dengan CCI perbedaannya menjadi jelas saat kita membandingkan waktu yang dibutuhkan untuk membangun CCI di atas meja tumpukan atau membangun kembali CCI: Meringkas, mutlak Cara tercepat untuk memiliki data yang tersedia dalam sebuah tabel dengan Clustered ColumnStore Index adalah: load ke heap membangun CCI setelahnya dengan SQL 2016 Ent. Ed. Beban langsung ke CCI Untuk tabel dengan Clustered ColumnStore Index sudah dibuat, pastikan Anda melakukan streaming langsung ke Compressed Row Groups untuk memaksimalkan throughput. Untuk melakukannya, ukuran batch Insert harus sama atau lebih besar dari 100K Rows (102400 tepatnya). Batch yang lebih kecil akan ditulis ke dalam tabel delta store yang dikompres terlebih dahulu sebelum menjadi tuple pindah ke segmen Row Group yang dikompresi akhir, yang berarti SQL Server harus menyentuh data dua kali: Ada berbagai pilihan untuk memuat data dan kita akan membahas yang paling sering digunakan. Yang, seperti perintah Massal Insert, BCP dan SSIS. Mari kita lihat apa yang dibutuhkan untuk mendapatkan performa terbaik dan cara memonitor 1) T-SQL Massal Insert Mari kita mulai dengan perintah BULK INSERT: Memeriksa Kemajuan Muatan Data Untuk memeriksa Jumlah Baris yang sudah masuk ke CCI, bahkan ketika Pilihan Table Lock sedang digunakan, query dmv baru yang disebut sys.dmdbcolumnstorerowgroupphysicalstats: DMV ini juga akan mengungkapkan kemungkinan negara Resource Group secara lebih rinci saat memuat. Ada empat kemungkinan Row Group menyatakan saat memuat data. Bila Anda melihat negara INVISBILE seperti pada gambar di bawah berarti data dikompres menjadi RowGroup. 0: INVISIBLE (RowGroup sedang dalam proses dibangun dari data di delta store) 1: OPEN160160160160160160160 (RowGroup menerima catatan baru) 2: CLOSED160160160 (RowGroup terisi namun belum dikompres oleh proses penggerak tuple) 3: COMPRESSED160 ( RowGroup diisi dan dikompres). 4 TOMBSTONE160 (RowGroup siap menjadi sampah yang dikumpulkan dan dihapus) Dengan menentukan Ukuran Batch dengan nilai 102400 atau lebih tinggi, Anda akan mencapai kinerja maksimal dan data akan dialirkan dan dikompres secara langsung ke dalam RG terakhirnya. Perilaku ini akan muncul sebagai COMPRESSED. Anda juga dapat memeriksa DMV yang diperkenalkan dengan SQL2014 untuk memeriksa RowGroup State, yaitu sys.columnstorerowgroups DMV: Hasil Uji Massal memasukkan data ke dalam tabel dengan CCI melalui perintah Massal Insert sedikit dapat diperbaiki dengan menambahkan Batchsize102400 dan Pilihan TABLOCK Ini membawa 8 peningkatan throughput. 2) BCP.exe Utilitas BCP masih digunakan cukup banyak di lingkungan produksi banyak yang layak untuk memeriksanya dengan cepat: secara default, BCP memberi sents 1000 baris pada saat itu ke SQL Server. Waktu yang dibutuhkan untuk memuat 7.2GB data via BCP: 530 detik. Or160 113K rowssec Negara RowGroup menunjukkan NVISIBLE yang berarti bahwa dengan pengaturan default, Delta Store sedang digunakan. Untuk memastikan perintah BCP mengalirkan data secara langsung ke dalam RG yang dikompres, Anda harus menambahkan opsi batchsize b dengan nilai minimal 102400. Saya menjalankan berbagai tes dengan ukuran batch yang lebih besar: hingga 1048576, namun 102400 memberi yang terbaik untuk saya. hasil. BCP DB.dbo.LINEITEMCCI di F: TPCHlineitem.tbl S. -c -T -tquotquot -b 102400 h tablock Status RowGroup sekarang menunjukkan COMPRESSED yang berarti kita melewati Delta Store dan data stream ke dalam RG terkompresi: Hasil: BCP Selesai dalam 457 detik, atau 133K baris per detik atau Selama pengujian saya melihat bahwa pengaturan SSIS 2016 default menggunakan ukuran buffer memori yang juga berpotensi membatasi ukuran bets menjadi kurang dari 100K Rows. Pada contoh di bawah ini, Anda melihat data tersebut mendarat di toko delta: negara bagian RG ditutup dan ladang deltastorehobtid dihuni, yang berarti toko delta adalah leveraged. Inilah saatnya untuk mengulurkan tangan dan memeriksakan diri kepada rekan-rekan saya yang untungnya telah memperhatikan hal ini dan solusinya sudah ada di sana (lihat: Data Flow Buffer Auto Sizing kemampuan manfaat data loading ke CCI). Untuk sepenuhnya memanfaatkan kemampuan streaming CCI Anda harus meningkatkan pengaturan BufferSize Amp MaxRows default: Ubah ini menjadi nilai 10x lebih besar: 8211 DefaultMaxBufferRows dari 10000 menjadi 1024000 dan yang paling penting: 8211 DefaultBufferSize dari 10485760 menjadi 104857600. Catatan: pengaturan AutoAdjustBufferSize yang baru harus disetel ke True saat Anda memuat baris data yang sangat luas. Ubah juga nilai untuk adaptor Tujuan: 8211 Baris per Batch: 160 dari none ke 102400 8211 Ukuran komit Insert maksimum: dari 2147483647 menjadi 102400 Paritas fitur diperkenalkan dengan SQL Server 2016 SP1 membuka rentang kemungkinan baru untuk mendapatkan keuntungan dari semoga Panduan di atas membantu Anda memaksimalkan kinerja Massal Sisipkan, BCP, dan SSIS saat memuat data ke dalam Indeks Kolom Kolom Clustered Apa yang akan menjadi cara tercepat mutlak untuk memuat data dari flatfile ke dalam tabel di dalam SQL Server 2016 Banyak yang telah berubah sejak awal saya Posting tentang topik ini bertahun-tahun yang lalu, seperti pengenalan tabel di-memori yang dioptimalkan dan indeks tabel Columnstore yang Dapat Diperoleh. Juga daftar kendaraan pengangkut data yang bisa dipilih berkembang: selain BCP, perintah T-SQL Bulk Insert, SSIS sebagai alat ETL dan PowerShell ada beberapa yang baru ditambahkan, seperti PolyBase, External R Script atau ADF. Dalam posting ini saya akan mulai dengan memeriksa berapa banyak yang lebih cepat dari ampli tahan lama yang baru yang tidak tahan lama. Tabel memori Dalam Menetapkan Baseline Untuk tes ini saya menggunakan Standar Azure DS4V2 Standard VM dengan 8 core28 GB RAM dan 2 HDD Volumes with host caching RW diaktifkan (Kedua Luns menyediakan 275 MBsec RW throughput meskipun GUI menyatakan batas 60MBsec). Saya menghasilkan sebuah file flat lineidem 60 Juta baris7.2 Gigabyte TPCH lineitem sebagai data untuk dimuat. Sebagai dasar untuk digunakan untuk perbandingan, kami akan menggunakan waktu yang dibutuhkan untuk memuat file ke dalam tabel Heap: Perintah Massal Insert reguler ini selesai dalam waktu 7 menit dengan rata-rata 143K rowssec. Mengaktifkan database uji untuk tabel yang dioptimalkan oleh Memori (pada SQL20142016 Enterprise amp developer Edition) memperkenalkan tabel memori yang dirancang untuk OLTP yang sangat cepat dengan banyak transaksi kecil dan konkurensi tinggi, yang merupakan jenis beban kerja yang sama sekali berbeda dengan penyisipan massal namun, hanya saja Keluar dari keingintahuan mencobanya. Ada 2 jenis tabel memori: tabel tahan lama dan tidak tahan lama. Yang tahan lama akan bertahan data pada disk, yang tidak tahan lama wont. Untuk mengaktifkan opsi ini kita harus melakukan beberapa pekerjaan rumah tangga dan menetapkan volume disk yang cepat untuk hosting file-file ini. Pertama, ubah database untuk mengaktifkan opsi Contains MEMORYOPTIMIZEDDATA diikuti dengan menambahkan lokasi File dan Filegroup yang akan berisi tabel Memory-Optimized: Hal ketiga yang harus dilakukan adalah menambahkan kolam memori terpisah ke instance SQL Server sehingga dapat menyimpan semua Data yang akan kita muat ke dalam tabel memori dipisahkan dari kolam memori defaultnya: Mengikat basis data ke kolam memori Langkah-langkah untuk menentukan kolam memori terpisah dan mengikat basis data ke daftar berikut: Kolam memori ekstra dikelola melalui Gubernur Sumber Daya SQL. Langkah keempat dan terakhir adalah mengikat database uji ke kolam memori baru dengan perintah sys.spxtpbinddbresourcepool.160 Agar pengikatan menjadi efektif, kita harus mengambil database secara offline dan mengembalikannya secara online. Setelah terikat, kita dapat secara dinamis mengubah jumlah memori yang diberikan ke kolamnya melalui perintah ALTER RESOURCE POOL PoolHk WITH (MAXMEMORYPERCENT 80). Sisipkan Massal ke dalam tabel Memori Dalam Tahan Sekarang kita semua siap dengan opsi In-memory yang diaktifkan, kita dapat membuat tabel memori. Setiap tabel yang dioptimalkan memori setidaknya memiliki satu indeks (baik indeks Range-atau Hash) yang benar-benar (re-) tersusun dalam memori dan tidak pernah disimpan di disk. Sebuah tabel tahan lama harus memiliki primary key yang dideklarasikan, yang kemudian dapat didukung oleh indeks yang dibutuhkan. Untuk mendukung kunci primer, saya menambahkan kolom ROWID1 rownumber ekstra ke tabel: Menentukan ukuran bets 1 (hingga 5) Juta baris ke perintah insert massal membantu menahan data ke disk sementara sisipan massal sedang berlangsung (alih-alih menyimpan Itu semua pada akhirnya) sehingga meminimalkan tekanan memori pada kolam memori PookHK yang kita buat. Beban data ke dalam tabel In-Memory yang tahan lama akan selesai dalam 5 menit 28 detik, atau 183K Rowssec. Itu adalah waktu yang baik tapi tidak terlalu cepat dari baseline kami. Melihat sys.dmoswaitstats menunjukkan bahwa waitstat no.1 adalah IMPPROVIOWAIT yang terjadi saat SQL Server menunggu beban massal IO selesai. Melihat kinerja counter Bulk Copy Rowssec dan Disk Write Bytessec menunjukkan pembilasan pada lonjakan disk sebesar 275 MBsec setelah sebuah batch masuk (lonjakan hijau). Itu adalah maksimum dari apa yang disk dapat memberikan tapi doesnt menjelaskan semuanya. Dengan keuntungan kecil, kita akan memarkir yang satu ini untuk penyelidikan masa depan. Pemantauan Kolam Memori Melalui sys.dmresourcegovernorresourcepools dmv dapatkah kita memeriksa apakah tabel memori kita memanfaatkan poolHK memory Pool yang baru dibuat: Output menunjukkan bahwa ini adalah kasus 7.2GB (beberapa tambahan untuk Rowid) terkompresi ke memori PoolHk pool: Jika Anda mencoba memuat lebih banyak data daripada memori yang tersedia di kolam, Anda akan mendapatkan pesan yang tepat seperti ini: Pernyataan telah dihentikan. Msg 701, Level 17, State 103, Line 5 Ada memori sistem yang tidak mencukupi di pool sumber 8216PookHK untuk menjalankan query ini. Untuk melihat satu tingkat lebih dalam pada alokasi ruang memori pada basis tabel In-memory Anda dapat menjalankan query berikut (diambil dari SQL Server In-Memory OLTP Internal untuk dokumen SQL Server 2016): Data yang baru saja kita muat disimpan sebagai Struktur varheap dengan indeks hash: Sejauh ini bagus Sekarang mari kita lanjutkan dan lihat bagaimana pentahapan di meja yang tidak tahan lama melakukan Sisipkan Massal ke dalam tabel In-Memory Non-Tahan Lama Untuk tabel IMND kita tidak memerlukan kunci Primer jadi kita hanya Tambahkan dan indeks Hash yang tidak berkerumun dan setel DURABILITY SCHEMAONLY. Bulk memasukkan Data loading ke dalam tabel non-tahan lama selesai dalam waktu 3 menit dengan throughput 335K rowssec (vs 7 menit) Ini adalah 2.3x lebih cepat kemudian dimasukkan ke dalam tumpukan meja. Untuk pementasan data ini pasti cepat menang SSIS Single Massal Insert ke dalam tabel Non-Durable Secara tradisional SSIS adalah cara tercepat untuk memuat file dengan cepat ke SQL Server karena SSIS akan menangani semua data pre-processing sehingga mesin SQL Server bisa Menghabiskan CPU kutu pada terus data ke disk. Akankah ini masih terjadi saat memasukkan data ke dalam tabel yang tidak tahan lama Berikut adalah ringkasan tes yang saya hadapi dengan SSIS untuk posting ini: opsi SSIS Fastparse dan160 pengaturan DefaultBufferMaxRows dan DefaultBufferSize adalah penguat kinerja utama. Juga penyedia OLE DB (SQLOLEDB.1) asli melakukan sedikit lebih baik daripada Klien Asli SQL (SQLNCLI11.1). Ketika Anda menjalankan SSIS dan SQL Server berdampingan, meningkatkan ukuran paket jaringan tidak diperlukan.160160 Hasil bersih: paket SSIS dasar yang membaca sumber file datar dan menulis data secara langsung ke tabel Non-Tahan Lama melalui tujuan OLE DB Melakukan hal yang sama seperti perintah Massal Insert ke dalam tabel IMND: 60 Juta baris dimuat dalam 2menit 59 detik atau 335K rowssec, identik dengan perintah Insert Massal. SSIS dengan Distributor Data Seimbang Tapi wait8230160 tabel in-memory dirancang untuk bekerja mengunci pengunci latch secara gratis sehingga ini berarti kita dapat memuat data juga melalui beberapa aliran. Yang mudah dicapai dengan SSIS, Distributor Data Seimbang akan membawa hanya itu (BDD Tercantum di bagian umum dari SSIS Toolbox) Menambahkan komponen BDD dan memasukkan data ke dalam tabel Non-tahan lama yang sama dengan 3 stream memberikan throughput terbaik: kita sekarang sampai dengan 526000 Rowssec Melihat garis datar ini, hanya dengan 160 dari waktu CPU yang digunakan oleh SQLServer, nampaknya kita mengalami beberapa hambatan: Saya dengan cepat mencoba untuk menjadi kreatif dengan memanfaatkan fungsi modulo dan menambahkan 2 arus data lagi dalam paket (masing-masing memproses 13 data) 160 tapi itu tidak memperbaiki Banyak (1 min52sec) jadi topik yang bagus untuk diselidiki untuk opsi post160160 masa depan Post-Memory Non-Durable membawa beberapa peningkatan kinerja yang serius untuk pemangkasan data yang memuat data 1.5x lebih cepat dengan pemain reguler Bulk T dan sampai 3.6x kali lebih cepat dengan SSIS. Pilihan ini, yang terutama dirancang untuk mempercepat OLTP, juga dapat membuat perbedaan besar untuk mengecilkan jendela batch Anda dengan cepat (Untuk dilanjutkan) Membaca secepat mungkin dari sebuah meja dengan SSIS (Bagian II) Baru-baru ini saya membuat blog tentang bagaimana menjadi selektif. Mungkin saat membaca dari dan OLE DB Data Source (Bagian I) dan bagaimana memuat data dari file flat tunggal secepat mungkin ke dalam tabel SQL Server. Tapi Anda mungkin memperhatikan bahwa Out of the box SSIS membaca data lebih cepat dari file flat daripada dari tabel SQL. Pada artikel ini saya akan berbagi trik terbaru saya tentang cara mempercepat pembacaan dari satu meja, biasanya setidaknya dua kali lebih cepat. Waktu untuk mengalahkan, sumber asli OLE DB kecepatan Langkah pertama, seperti biasa, adalah memeriksa throughput default. Dan durasi dengan menghitung baris dari Native OLE DB Data Source. Dalam kasus kami dibutuhkan waktu 14 menit dan 6 detik untuk membaca semua perkiraan. 180 juta baris atau 12,89 GB dari tabel SQL Server dengan 16 kolom data. Untuk perbandingan membaca data yang sama dari satu file flat hanya butuh 7 menit 57 detik. Jadi, darimana perbedaan ini berasal dari yang terutama karena ukuran Paket IO yang saya gunakan akan saya katakan. SSIS dibaca dengan 128 KB blok dari flat file dan menggunakan secara default 4KB (ukuran paket jaringan default) yang berubah menjadi max. 32 KB untuk meminta data dari SQL Server (32KB juga maksimal untuk versi R2 SQL2008 yang baru). Untuk mengambil data lebih cepat kita harus menemukan cara untuk menangani lebih banyak permintaan IO secara paralel Untuk mengatur baseline hanya membuat sebuah paket dan menghitung baris dari Native OLEDB Source. (Jangan lupa untuk mengubah Ukuran Paket dari 0 menjadi 32767 di Connection Manager). Penghitung Monitor Kinerja Windows untuk diperiksa adalah beban CPU dari proses SSIS (DtsDebughost saat menjalankan paket dari dalam BIDS atau DTEXEC saat dimulai dari baris perintah) dan proses SQL Server. Juga periksa jumlah byte yang sedang kita baca: pilih counter bytessec IO dari prosesnya.160 Menambahkan paralelisme dengan menggunakan algoritma Modulo Trik pengoptimalan yang ingin saya tunjukkan kepada Anda didasarkan pada penggunaan modulo aritmatika operator yang dapat dilakukan. Digunakan dengan tipe data numerik. Ini mengembalikan sisa satu nomor dibagi dengan yang lain. Misalnya, jika ingin membaca dengan 3 aliran paralel gunakan bisa menggunakan modulo 3 (3). Anda dapat mengambil 3 output stream dengan menentukan nilai sisa 0,1 dan 2.160 (Menggunakan nilai kurang dari 0 atau lebih besar dari 2 akan mengembalikan 0 baris saat modulo 3 digunakan.) Anda dapat memeriksa hasilnya juga dengan menjalankan query Di SSMS atau dengan opsi Preview BIDS dari OLEDB Source Editor. Pilih dari dbo LINEITEMHash96KeySSD WHERE (LORDERKEY 3) 2 Saat Anda membuat query ini menjadi paket SSIS, Anda akan melihat bahwa pada awalnya hal itu menciptakan paralelisme baris cukup bagus dibagi dan dibaca dari dua sumber data, namun sayangnya total waktu eksekusi paket tidak turun , Yang agak aneh.160 (Lagi pula, 160 menambahkan lebih banyak sumber adalah trik pengoptimalan yang kami temukan sudah lama sekali, kembali di tahun 2004 saat menguji rilis SSIS awal 2 Beta). Tentukan dalam paket Anda beberapa sumber data dan gabungkan hasilnya dengan komponen Union All: Monitor Aktivitas menunjukkan kepada kita dengan cepat bahwa memang beberapa SPIDS dipecat oleh paket SSIS namun banyak yang Ditangguhkan dan benar-benar menyebabkan sinkronisasi yang tidak perlu: Untungnya hal ini dapat diselesaikan dengan cepat. Dengan menentukan petunjuk kueri OPTION (MAXDOP 1). Ini menghilangkan overhead sinkronisasi tanpa mengorbankan throughput dalam kasus ini. Membaca beberapa kali dari tabel SQL yang sama Waktu untuk memasukkannya ke tes dan meningkatkan jumlah komponen sumber data dalam paket. Setiap sumber data OLE DB harus menunjuk ke tabel masukan yang sama, 160 hanya memodifikasi faktor modulo dan pemisah output saat menambahkan lebih banyak. Hasil terbaik yang saya dapatkan saat membaca dari sumber data yang sama 3 atau 4 kali secara paralel: Ketika kita memeriksa penghitung perfmon sekali lagi, Anda akan melihat throughput IO benar-benar meningkat dari semula 21. MBsec menjadi 46,6 MBsec rata-rata, jadi Ini memiliki lebih dari dua kali lipat Konsumsi CPU dari proses SSIS dan SQLServer juga telah meningkat 160 SSIS dari 100 menjadi 350 (3.5 CPU) dan SQLServer juga menggunakan CPU ekstra. Durasi eksekusi paket keseluruhan untuk membaca 180 juta baris yang sama (12,89 GB) 160 menurun dari pada awalnya 14 menit 6 detik menjadi hanya 6 menit dan 33 detik saat membaca data dengan 3 aliran paralel Bila Anda harus mempercepat membaca sejumlah besar data Dari satu meja dalam paket SSIS Anda, Anda dapat mengurangi durasi lebih dari setengah dengan menambahkan beberapa bentuk paralelisme ke dalam paket Anda dengan menggunakan trik Modulo1160 ini. Biasanya membaca160 data dari tabel SQL Server yang sama dengan 3 atau 4 stream paralel memberikan hasil terbaik160 Membaca secepat mungkin dari sebuah tabel dengan SSIS (Bagian II). 5.0 out of 5 berdasarkan 22 peringkat 2 Rob Volk 2010-5-26 03:27 Dapatkah Anda menjelaskan mengapa Anda menggunakan klausul WHERE ini: WHERE (CAST (LORDERKEY SEBAGAI VARCHAR) 3) 2 Memasukkan kolom ke varchar tidak ada gunanya jika Anda menginginkan Untuk melakukan operasi modulo di atasnya, karena harus melakukan pemeran implisit (belakang) ke tipe numerik. Ini mungkin tidak mempengaruhi operasi SSIS tapi kemungkinan akan memperlambat porsi SQL Server. Henk 2010-5-26 10:31 Hi Rob, penjelasannya adalah judul posting ini, 8220untuk membacanya secepat mungkin8221 -) menggunakan casting ke varchar membuatnya sedikit lebih cepat, menggunakan 10 sumber daya CPU ekstra untuk SQLServer proses. Tapi kau benar, itu agak membingungkan dan menghapus casting dari kueri juga akan melakukan tipuan: PILIH dari dbo.LINEITEMHash96KeySSD WHERE (LORDERKEY 3) 0 pilihan (maxdop 1) 3 Henk 2010-11-8 21:24 jika Anda mendapatkan hanya 13 Dari data. Mungkin Anda lupa mengatur fungsi modul dengan benar di masing-masing pohon. Seperti: pilih dari dbo.LINEITEMHash96KeySSD WHERE (LORDERKEY 3) 0 pilih dari dbo.LINEITEMHash96KeySSD WHERE (LORDERKEY 3) 1 pilih dari dbo.LINEITEMHash96KeySSD WHERE (LORDERKEY 3) 2 (Anda mengatakan bahwa Anda sedang memproses 50 baris pabrik dari sebuah stage stage db dalam 6 Menit 138K rowssec dengan komponen rowools SSIS Anda dapat memeriksa apakah jumlah baris total sesuai dengan jumlah baris dalam database pementasan Anda. Ini juga akan memberi tahu Anda seberapa cepat Anda dapat membaca dari sumber data dan MBytesec yang efektif. Mungkin ada beberapa ruang lagi. Untuk optimasi). 4 Dan 2011-2-26 13:08 I8217m baru mengenal paralelisme jadi percayalah padaku jika pertanyaanku sederhana. Tapi saya bingung bagaimana petunjuk query OPSI (MAXDOP 1) akan menyebabkan spids ke semua berjalan pada waktu yang sama. Saya membaca bahwa generasi perencanaan paralel 8220 ini. Operasi akan dijalankan serially8221 (Ditemukan di stackoverflowquestions163917optionmaxdop-1-in-sql-server). Itu membuat saya berpikir bahwa OPTION (MAXDOP 1) hanya mengizinkan satu CPU. Mungkin lebih baik menggunakan semua kemungkinan CPU8217s Henk 2011-2-26 22:38 triknya adalah Anda memulai banyak sesi terpisah ke sql server, setiap sesi melayani sebagian data, dan8230 setiap sesi (SPID) adalah Memang ditangani hanya dengan 1 CPU (penjadwal SQL) dengan menekan paralelisme dalam setiap sesi, Anda mendapatkan kinerja (seperti yang ditunjukkan pada gambar, jika tidak, SPIDS memiliki status prima 8220suspended8221, jadi tidak melakukan sesuatu yang berguna) Namun, ketika Anda membaca dari tabel yang dipartisi, Yang merupakan operasi multithread dengan alam, Anda akan melihat bahwa menggunakan nomor maxdop yang lebih tinggi dapat meningkatkan throughput. (Baca lebih lanjut tentang topik ini di: henkvandervalkoptimizing-sql-in-memory-table-scan-processing-speed. Dimana membaca dari tabel yang dipartisi menggunakan 88 core-)) Semoga ini bisa membantu Brgds, Henk 5 Dan 2011-3-1 20 : 37 Jadi, apakah (MAXDOP 1) menghentikan cpu agar tidak bekerja dengan proses lain pada saat bersamaan dan berkonsentrasi pada pertanyaan saat ini Henk 2011-3-2 10:38 Dan, Anda tidak dapat beralih ke kesimpulan itu: dengan MAXDOP 1 kueri Akan ditangani oleh satu SQL Scheduler yang menggunakan satu CPU. Namun jika ada beberapa permintaan untuk dilayani, ini juga akan dijadwalkan. 6 Dan 2011-3-4 21:44 Henk, saya memiliki sebuah ssis pkg dimana saya memiliki 29 tabel yang ingin saya muat ulang seperti yang Anda jelaskan di atas. I8217m menambahkan pohon satu pohon sekaligus dan melihat dalmnya. Pohon pertama berlari dengan sendirinya baik-baik saja tapi ketika saya menambahkan yang lain ada 6 id sesi tapi hanya 3 yang berjalan, 1 mengatakan diskors dan yang lainnya tidak memiliki status apa-apa. Saya menetapkan properti pkg MaxConcurrentExecutables 3 (Hanya memiliki 2 DataFlows saat ini) dan telah menetapkan setiap dataflow8217s EngineThread 3 untuk menangani 3 jaringan data per aliran data. I8217m menjalankan ini dalam pekerjaan di kotak SQL Server 2005 dengan prosesor 8 3.2 Gig dan 64 Gig of Ram (yang belum pernah terlihat di atas 50, mungkin pengaturan untuk amt memori yang dialokasikan untuk SQL Server perlu disesuaikan). Melihat Monitor Aktivitas waktu prosesor saya cukup banyak bertahan di kisaran 30 sampai 50 yang membuat saya gila berpikir bahwa banyak waktu prosesor tersedia namun sesi saya dalam keadaan tertunda. Tahu apa yang saya lakukan salah 7 Steve 2011-4-2 19:06 Henk, Saran bagus, terutama seperti operator modulus untuk membagi ke persis berapa banyak aliran sejajar yang ingin digunakan. Saya telah menggunakan sebuah wadah berurutan dengan beberapa sumber data di dalamnya untuk memilikinya menjalankan thread terpisah untuk beban paralel (dari sumber Oracle jarak jauh) daripada metode Anda di atas dengan serikat semua dan maxdop. Apakah Anda tahu jika ada kerugian untuk menggunakan metode itu (apakah ini menyebabkan sinkronisasi cxpacket menunggu) Tampaknya bekerja dengan benar, dan saya akan mencoba menjalankan beberapa tes tapi kalau-kalau Anda mencoba ini dan tahu. Henk 2011-4-2 22:35 jika Anda membaca dari tabel yang berbeda menggunakan beberapa datasources baik-baik saja. Dari apa yang saya lihat di situs pelanggan, biasanya membaca dari tabel oracle agak lambat dari pada penulisan sebenarnya ke dalam tabel SQLServer, Anda dapat memeriksanya sendiri dengan menggunakan komponen Rowcount trick untuk memeriksa seberapa cepat Anda benar-benar dapat membaca hanya dengan datasources. (Apakah Anda menggunakan Konektor Microsoft Attunity yang dapat diunduh terpisah untuk Oracle dari Pusat Download Microsoft) Jika diperlukan, Anda dapat menuliskan data ke dalam beberapa partisi SQL Server menggunakan trik modulo. (Tolong jangan lupa untuk juga memeriksa dengan Taskmanager nomor throughput jaringan :-)) Beritahu saya hasil Anda semoga sukses Henk 8 bender 2011-10-26 20:22 9 Nik - Shahriar Nikkhah 2012-7-31 19:14 Hi Henk Apakah menurut Anda bahwa 8220OFFSET dan FETCH8221 akan membantu dalam contoh ini, saya berasumsi bahwa pada dasarnya akan memainkan peran 8220WHERE (LORDERKEY 3) 28221. Saya belum mengujinya. Saya melakukan optimasi apa dan memasukkan file CSV 10 GB di 7m51s di Fast Track. Menurut Anda apa Henk 2013-4-12 19:28 10GB 471 Detik 21,7 MBsec ini terlihat seperti satu tugas Massal Sisipkan saja Apakah waktu throughput ini dapat diterima untuk Anda Jika tidak, apakah Anda sudah mencoba beberapa opsi untuk menciptakan paralelisme (dengan SSIS dan Trik modulo, atau muat beberapa file yang lebih kecil secara paralel) Brgds, Henk Ini bagus sekali. Senang saya menemukan halaman ini. Saya telah menggunakan MAXDOP 1 di semua meja besar saya selama bertahun-tahun. Recently, I started a job where there are quite a few legacy DTS packages that do massive table to table transfers for ETL processes. Splitting the tables using the 3(0-2) worked great. I am even tempted to split them out more to see how many times I can split my source before my netapp bricks itself. 12 Kamil 2014-4-30 08:51 I run some tests of data extraction with the method presented here. I checked it on smaller table 1.5 GB (12 mln rows) on my virtual machine with 2 procesors. The ssis package consists only from ole db data sources, 1 union all and 1 multicast componets. In properties MaximumErrorCount set to 4 (I have only 2 processors) and EngineThreads to default 10. In standard scenario with only 1 data source the ssis pulled data in 30sec. I got the best result with only 2 pararell data sources with time 25sec. I can8217t go to 50 of performance improvment. Have I missed something or this solution works great only for realy big tables Henk 2014-5-8 10:45 Hi Kamil, (1.5 GB 25 seconds 60 MBsec this is close to the limit of a 1Gbit network connection are you using iSCSI for your VM8217s) Just doublecheck the maximum source speed by reading from the source table with the modulo option (2 for 2 cpu8217s) and maxdop 1 with the rowcount as destination (as described in my blog). this will tell you how fast you can read. If you can read much faster than 60 MBsec than this means you have to optimize some other portions of the package 13 GowriShankar 2015-10-27 14:34 Hi Henk, Any idea for non numeric key fields where modulo is not applicable. Henk 2015-10-29 09:54 Hi Gowri, that is indeed a tricky one. would you have the option to add an extra column (Either as part of your source data or generate one on the fly in SSIS in the second please also add doublecheck the total number of rows read..)
Forex-waktu-review
Opsi-trading-tier-2-standard-margin