Pembaruan 4/11/2014
Sepertinya skrip mulai terputus pada alat Hapus Fitur, jadi saya beralih ke Truncate Table, seperti yang disarankan dalam jawaban di bawah ini. Saya juga menghapus variabel yang tidak digunakan dari alat append.
Pembaruan 4/10/2014
Saya menjalankan skrip ini di komputer rekan kerja saya (mesinnya memiliki lebih banyak memori DAN mengandung ArcGIS 10.0 / Python26) dan itu berjalan dengan cepat. Hore! Setelah dukungan teknis saya menemukan CD ArcGIS 10.0, saya akan menginstal dan menguji untuk melihat apakah itu meningkatkan kecepatan pada mesin saya. Agar jelas, kami menjalankan skrip yang sama, drive jaringan dan koneksi database kami dipetakan secara identik, dan pernyataan cetaknya sama. Saya akan memposting pembaruan di sini setelah itu terjadi.
Akhiri pembaruan
Saya perlu meningkatkan kecepatan beberapa skrip Python yang melakukan pembaruan pada database Oracle. Saya memiliki skrip Python ini berjalan dengan baik selama + tahun, melalui tugas yang dijadwalkan dan file batch untuk memulai skrip. Minggu lalu saya pindah dari XP ke mesin Windows 7 dan ArcGIS 10.0 -> 10.1. Sejak saat itu skrip menjadi sangat lambat. Jika saya menjalankan skrip ini menggunakan kelas fitur kecil (berisi ~ 20 fitur) itu berjalan dalam 30 detik. Jika saya menggunakan kelas fitur menengah (~ 80.000 catatan) ini berjalan dalam 15 menit. Kelas fitur yang benar-benar saya butuhkan untuk dapat mentransfer dengan cepat berisi sekitar 1.000.000 catatan - skrip hanya sejauh pernyataan cetak untuk memeriksa apakah file ada (jika pernyataan dalam kode di bawah). Proses ini akan memakan waktu hanya 35 menit untuk menyelesaikan pada mesin XP / ArcGIS 10.0 saya.
Di bawah ini adalah kode sederhana yang telah saya uji. Adakah yang punya saran tentang apa yang bisa saya lakukan untuk meningkatkan kecepatan? Terima kasih, Patty
import arcpy, os, sys
from arcpy import env
arcpy.env.overwriteOutput = True
from datetime import datetime
import smtplib
import string
import urllib
#Define variables
inWorkspace = "O:/LANDING_PAD/BOE/example.gdb"
lpFeatures = inWorkspace + os.sep + "fc1"
outWorkspace = "Database Connections\\THIS.sde"
arcpy.env.workspace = outWorkspace
workspace = ""
copyFC = outWorkspace + os.sep + "SDE.fc1_1" #The feature class the script will update via delete and append
schema_type = "NO_TEST"
fieldMappings = ""
subtype = ""
t = datetime.now()
print "This script began at: " + str(t)
if arcpy.Exists(lpFeatures) is True and arcpy.Exists(copyFC) is True:
print "Both files exist. Beginning delete..."
arcpy.DeleteFeatures_management(copyFC) #(copyFC)
print "ALL DONE DELETING!"
arcpy.Append_management(lpFeatures, copyFC, schema_type, fieldMappings, subtype) #Append data from landing pad to db
print "ALL DONE APPENDING!"
record_count = arcpy.GetCount_management(lpFeatures)
print record_count
r = datetime.now()
print "This script ended at: " + str(r)
sumber
Delete_management()
dan kemudian membuatnya kembali denganCopyFeatures_management()
atauFeatureClassToFeatureClass_conversion()
?Jawaban:
Saya ingin berkomentar dulu, tapi kemudian rasanya lebih tepat untuk membungkusnya menjadi jawaban (meskipun mungkin tidak lengkap).
Saya telah menjalankan kode Anda di komputer saya (laptop perangkat keras teratas dengan SSD) menambahkan kelas fitur file geodatabase ke kelas fitur geodatabase SQL Server pada mesin yang sama yang membutuhkan waktu sekitar 13 menit. Saya tidak dapat memberi tahu Anda dengan pasti mengapa kecepatan eksekusi sangat berbeda di lingkungan Anda (10.0 >> 10.1), tetapi Anda telah meminta saran tentang apa yang dapat Anda lakukan untuk meningkatkan kecepatan , jadi di sini ada beberapa ide yang dapat meningkatkan kecepatan menjalankan skrip.
1) Saya menjalankan skrip dari baris perintah yang setara dengan menjalankan file bat. (Saya menjalankan skrip dalam rasa 64-bit, saya telah menginstal ArcGISx6410.2 64bit Python).
Dari pengalaman saya, umumnya lebih cepat menjalankan versi Python 64bit untuk menjalankan operasi GP yang panjang dan berat seperti Tambah. Jadi, Anda ingin memastikan Anda menjalankan versi Python ini saat menjalankan skrip.
2) Saya tidak akan merekomendasikan menggunakan
arcpy.DeleteFeatures_management
; ini jauh lebih lambat daripada menjalankan Truncate Table karena yang terakhir tidak menggunakan transaksi database yang meningkatkan kinerja dari penghapusan baris-demi-baris.Anda menyebutkan bahwa skrip hanya berjalan sejauh pernyataan cetak untuk memeriksa apakah file ada (jika pernyataan dalam kode) . Ada kemungkinan besar bahwa itu terus menghapus baris demi baris yang mungkin merupakan proses yang sangat lambat ketika Anda mengakses tabel di database Oracle (atau benar-benar DBMS) jarak jauh. Coba jalankan skrip dengan Truncate Table, tetapi tanpa Append terlebih dahulu hanya untuk melihat perbedaan kinerja pada tahap penghapusan.
3) Anda tampaknya menggunakan
"Database Connections\\THIS.sde"
kode. Namun lebih baik untuk merujuk ke file koneksi itu sendiri (file .sde) dengan sistem file atau jalur UNC, bukan jendela katalog "Koneksi Database" folder. Anda dapat mengakses file .sde yang dibuat diC:\Users\%user%\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog
. Anda dapat memindahkan file .sde ini sesuai kebutuhan dan menempatkannya di folder yang dapat diakses oleh skrip Python.4) Dalam
arcpy.Append_management
fungsi ini, Anda menggunakan beberapa parameter kosong. Secara teori, seharusnya tidak ada bedanya, tapi saya sarankan menjalankan fungsi tanpa menentukan parameter itu hanya karena Anda tidak membutuhkannya. Anda tidak pernah tahu apa yang terjadi di balik layar dan apakah senar kosong itu dievaluasi di beberapa titik dan apakah ini dapat memengaruhi kinerja. Ikuti sajaarcpy.Append_management(lpFeatures, copyFC, schema_type)
dan jangan tentukan parameter yang tidak Anda berikan nilai apa pun.5) Saya tidak suka menggunakan
os.sep
ketika membangun jalur ke kelas fitur. Gunakanos.path.join(geodatabase,featureclassname)
untuk itu sebagai gantinya. Itu lebih bersih dan lebih mudah dibaca.Anda dapat menambahkan rincian lebih lanjut ke pertanyaan setelah Anda mencoba hal-hal di atas dan melakukan beberapa tes dan tinjauan kode.
Beberapa pertanyaan bagus untuk dibaca untuk mendapatkan wawasan lebih lanjut tentang cara mempercepat skrip Python di ArcGIS:
Kinerja skrip ArcGISS dan kumpulan data spasial yang besar
Background Geoprocessing (64-bit)
Arcgis CopyFeatures tool sangat lambat ketika mengekspor ke SDE
Cara untuk Mempercepat Skrip Python Berjalan Sebagai Alat ArcGIS
Pertimbangan geoprosesing untuk data ArcSDE
sumber
"Database Connections\\THIS.sde"
. Mungkin ini karena file batch hanya memulai skrip Python yang menggunakan variabel ini? Saya tidak dapat memiliki basis dataTHIS database.sde
yang aneh bagi saya karena ada ruang dalamDatabase Connections
. Terima kasih lagi,Saya berharap contoh ini juga akan membantu menjawab pertanyaan dan ada pada perangkat lunak yang lebih baru. Itu didasarkan pada jawaban dan komentar yang disebutkan di atas.
Mendirikan:
Beban harus malam. Itu ~ 9300 catatan dan 234 atribut.
Model asli di bawah dan dilakukan semua dalam SQL Server 2012 R2 / SDE (7 menit melalui ArcCatalog & 3 jam dengan python):
Bagaimana saya mengubahnya (10 detik melalui ArcCatalog & 10 detik melalui python): •
Apa yang sedikit membantu pada model asli adalah mengganti sumber data sesuai # 3 yang direkomendasikan di atas. Ini mencukur 30 detik saat berjalan di ArcCatalog. Dengan python mencukur sekitar 20 menit. Karena itu variabel dalam kecepatan tetapi bukan variabel yang paling berharga untuk ditangani dalam kasus saya. Tampaknya menurut sebagian besar blog SQL Server tidak suka memuat data berat "dari memori" (yaitu membuat xy event layer). SQL / SDE tampaknya lebih memilih objek aktual untuk dimuat. Ini menjelaskan mengapa beban saya yang lain saya lakukan dengan cara yang sama membutuhkan waktu 1 menit, tetapi itu hanya 1000 catatan dengan 15 atribut sehingga saya tidak pernah mempertanyakan efisiensi model saya sampai beban ini perlu dilakukan setiap malam. Seperti disebutkan beban ini adalah 9000 catatan dengan 236 atribut.
sumber
Masalah dengan kinerja antara 10.0 dan 10.1 adalah sesuatu di perpustakaan SDE diubah di desktop. Kami biasa memposting 1.000.000 malam dan hanya membutuhkan waktu 45 menit, setelah pembaruan perangkat lunak butuh waktu hampir 24 jam. Jelas tidak ada masalah dengan data dan hanya perangkat lunaknya saja yang berubah.
Periksa versi geodatabase untuk memastikannya cocok dengan versi klien yang menjalankan arcpy. Kami melaporkan ini ke ESRI tanpa respons atau pengakuan bug. Cukup jelas dan masalahnya dimulai setelah 10.0 SP1.
Juga tes lain salin / tempel lebih cepat daripada append mencoba ini dari 10.0 dan 10.1 dan kinerja harus serupa. Ini membuktikan ada semacam bug yang terjadi pada versi sebelumnya saat menambahkan geometri.
sumber