Masalah umum untuk Python dan R di SQL Server Pembelajaran Mesin Services
Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru
Penting
Dukungan untuk Pembelajaran Mesin Server (sebelumnya dikenal sebagai R Server) berakhir pada 1 Juli 2022. Untuk informasi selengkapnya, lihat Apa yang terjadi pada server Pembelajaran Mesin?
Artikel ini menjelaskan masalah atau batasan yang diketahui dengan komponen Python dan R yang disediakan di SQL Server Pembelajaran Mesin Services dan SQL Server 2016 R Services.
Masalah penyiapan dan konfigurasi
Untuk deskripsi proses yang terkait dengan penyiapan dan konfigurasi awal, lihat Menginstal SQL Server Pembelajaran Mesin Services. Ini berisi informasi tentang peningkatan, penginstalan berdampingan, dan penginstalan komponen R atau Python baru.
Hasil yang tidak konsisten dalam komputasi MKL karena variabel lingkungan yang hilang
Berlaku untuk: R_SERVER biner 9.0, 9.1, 9.2 atau 9.3.
R_SERVER menggunakan Intel Math Kernel Library (MKL). Untuk komputasi yang melibatkan MKL, hasil yang tidak konsisten dapat terjadi jika sistem Anda kehilangan variabel lingkungan.
Atur variabel 'MKL_CBWR'=AUTO
lingkungan untuk memastikan reproduktifitas numerik bersyarat dalam R_SERVER. Untuk informasi selengkapnya, lihat Pengantar Reproduktif Numerik Bersyar (CNR).
Solusi Sementara
Di Panel Kontrol, pilih Variabel Lingkungan Pengaturan>Sistem Tingkat Lanjut Sistem>dan Keamanan.>
Buat variabel Pengguna atau Sistem baru.
- Atur Variabel ke
MKL_CBWR
. - Atur Nilai ke
AUTO
.
- Atur Variabel ke
Mulai ulang R_SERVER. Di SQL Server, Anda dapat memulai ulang Layanan Launchpad SQL Server.
Catatan
Jika Anda menjalankan SQL Server 2019 (15.x) di Linux, edit atau buat .bash_profile
di direktori beranda pengguna Anda, tambahkan baris export MKL_CBWR="AUTO"
. Jalankan file ini dengan mengetik source .bash_profile
pada prompt perintah bash. Mulai ulang R_SERVER dengan mengetik Sys.getenv()
pada prompt perintah R.
Kesalahan runtime skrip R (SQL Server 2017 CU 5 - regresi CU 7)
Untuk SQL Server 2017 (14.x), dalam pembaruan kumulatif 5 hingga 7, ada regresi dalam file rlauncher.config di mana jalur file direktori sementara menyertakan ruang. Regresi ini dikoreksi di CU 8.
Kesalahan yang akan Anda lihat saat menjalankan skrip R menyertakan pesan berikut:
Tidak dapat berkomunikasi dengan runtime untuk skrip 'R'. Silakan periksa persyaratan runtime 'R'.
Pesan STDERR dari skrip eksternal:
Kesalahan fatal: tidak dapat membuat 'R_TempDir'
Solusi Sementara
Terapkan CU 8 saat tersedia. Atau, Anda dapat membuat rlauncher.config
ulang dengan menjalankan registerrext dengan hapus instalan/instal pada prompt perintah yang ditinggikan.
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /uninstall /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /install /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>
Contoh berikut menunjukkan perintah dengan instans default "MSSQL14. MSSQLSERVER" diinstal ke dalam C:\Program Files\Microsoft SQL Server\
:
"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /uninstall /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER
"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /install /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER
Tidak dapat menginstal fitur pembelajaran mesin SQL Server pada pengendali domain
Jika Anda mencoba menginstal Layanan R SQL Server 2016 (13.x) atau Layanan Pembelajaran Mesin SQL Server pada pengendali domain, penyetelan gagal, dengan kesalahan ini:
Terjadi kesalahan selama proses penyiapan fitur
Tidak dapat menemukan grup dengan identitas
Kode kesalahan komponen: 0x80131509
Kegagalan terjadi karena, pada pengontrol domain, layanan tidak dapat membuat 20 akun lokal yang diperlukan untuk menjalankan pembelajaran mesin. Secara umum, kami tidak menyarankan untuk menginstal SQL Server pada pengendali domain. Untuk informasi selengkapnya, lihat Buletin dukungan 2032911.
Instal rilis layanan terbaru untuk memastikan kompatibilitas dengan Klien Microsoft R
Jika Anda menginstal versi terbaru Klien Microsoft R dan menggunakannya untuk menjalankan R di SQL Server dalam konteks komputasi jarak jauh, Anda mungkin mendapatkan kesalahan seperti berikut ini:
Anda menjalankan Microsoft R Client versi 9.x.x di komputer Anda, yang tidak kompatibel dengan Microsoft R Server versi 8.x.x. Unduh dan instal versi yang kompatibel.
SQL Server 2016 (13.x) mengharuskan pustaka R pada klien sama persis dengan pustaka R di server. Pembatasan telah dihapus untuk rilis lebih lambat dari R Server 9.0.1. Namun, jika Anda mengalami kesalahan ini, verifikasi versi pustaka R yang digunakan oleh klien Anda dan server dan, jika perlu, perbarui klien agar sesuai dengan versi server.
Versi R yang diinstal dengan SQL Server R Services diperbarui setiap kali rilis layanan SQL Server diinstal. Untuk memastikan bahwa Anda selalu memiliki versi terbaru komponen R, pastikan untuk menginstal semua paket layanan.
Anda mungkin menerima pesan kesalahan saat menjalankan R Server 8.0.3 di SQL Server 2016: You are running version 9.0.0 of Microsoft R client on your computer, which is incompatible with the Microsoft R server version 8.0.3. Download and install a compatible version.
Kompatibilitas dengan Klien Microsoft R 9.0.0 di SQL Server 2016 dipastikan dalam patch berikut:
Untuk menghindari masalah dengan paket R, Anda juga dapat meningkatkan versi pustaka R yang diinstal di server, dengan mengubah perjanjian layanan Anda untuk menggunakan kebijakan Dukungan Siklus Hidup Modern, seperti yang dijelaskan di bagian berikutnya. Saat Anda melakukannya, versi R yang diinstal dengan SQL Server diperbarui pada jadwal yang sama yang digunakan untuk pembaruan Pembelajaran Mesin Server (sebelumnya Microsoft R Server).
Berlaku untuk: Layanan R SQL Server 2016 (13.x), dengan R Server versi 9.0.0 atau yang lebih lama
Komponen R hilang dari penyiapan SQL Server 2017 CU 3
Sejumlah terbatas komputer virtual Azure disediakan tanpa file penginstalan R yang harus disertakan dengan SQL Server. Masalah ini berlaku untuk komputer virtual yang disediakan dalam periode 2018-01-05 hingga 2018-01-23. Masalah ini mungkin juga memengaruhi penginstalan lokal, jika Anda menerapkan pembaruan CU 3 untuk SQL Server 2017 (14.x) selama periode dari 2018-01-05 hingga 2018-01-23.
Rilis layanan telah disediakan yang menyertakan versi file penginstalan R yang benar.
- Paket Pembaruan Kumulatif 3 untuk KB4052987 SQL Server 2017.
Untuk menginstal komponen dan memperbaiki SQL Server 2017 (14.x) CU 3, Anda harus menghapus instalasi CU 3, dan menginstal ulang versi yang diperbarui:
- Unduh file penginstalan CU 3 yang diperbarui, yang mencakup penginstal R.
- Hapus instalan CU 3. Di Panel Kontrol, cari Hapus instalan pembaruan, lalu pilih "Hotfix 3015 untuk SQL Server 2017 (KB4052987) (64-bit)". Lanjutkan dengan langkah-langkah penghapusan instalasi.
- Instal ulang pembaruan CU 3, dengan mengklik dua kali pada pembaruan untuk KB4052987 yang Anda unduh:
SQLServer2017-KB4052987-x64.exe
. Ikuti petunjuk penginstalan.
Tidak dapat menginstal komponen Python dalam penginstalan offline SQL Server 2017 atau yang lebih baru
Jika Anda menginstal versi pra-rilis SQL Server 2017 (14.x) di komputer tanpa akses internet, penginstal mungkin gagal menampilkan halaman yang meminta lokasi komponen Python yang diunduh. Dalam instans seperti itu, Anda dapat menginstal fitur Pembelajaran Mesin Services, tetapi bukan komponen Python.
Masalah ini diperbaiki dalam versi rilis. Selain itu, batasan ini tidak berlaku untuk komponen R.
Berlaku untuk: SQL Server 2017 (14.x) dengan Python
Peringatkan versi yang tidak kompatibel saat Anda tersambung ke versi SQL Server R Services yang lebih lama dari klien dengan menggunakan SQL Server 2017
Saat Anda menjalankan kode R dalam konteks komputasi SQL Server 2016 (13.x), Anda mungkin melihat kesalahan berikut:
Anda menjalankan Microsoft R Client versi 9.0.0 di komputer Anda, yang tidak kompatibel dengan Microsoft R Server versi 8.0.3. Unduh dan instal versi yang kompatibel.
Pesan ini ditampilkan jika salah satu dari dua pernyataan berikut ini benar:
- Anda menginstal R Server (Standalone) pada komputer klien dengan menggunakan wizard penyiapan untuk SQL Server 2017 (14.x).
- Anda menginstal Microsoft R Server dengan menggunakan alat penginstal Windows terpisah.
Untuk memastikan bahwa server dan klien menggunakan versi yang sama yang mungkin perlu Anda gunakan pengikatan, didukung untuk rilis Microsoft R Server 9.0 dan yang lebih baru, untuk meningkatkan komponen R di instans SQL Server 2016 (13.x). Untuk menentukan apakah dukungan untuk peningkatan tersedia untuk versi Layanan R Anda, lihat Meningkatkan instans Layanan R menggunakan SqlBindR.exe.
Berlaku untuk: Layanan R SQL Server 2016 (13.x), dengan R Server versi 9.0.0 atau yang lebih lama
Penyiapan untuk rilis layanan SQL Server 2016 mungkin gagal menginstal versi komponen R yang lebih baru
Saat Anda menginstal pembaruan kumulatif atau menginstal paket layanan untuk SQL Server 2016 (13.x) di komputer yang tidak tersambung ke internet, wizard penyetelan mungkin gagal menampilkan perintah yang memungkinkan Anda memperbarui komponen R dengan menggunakan file CAB yang diunduh. Kegagalan ini biasanya terjadi ketika beberapa komponen dipasang bersama dengan mesin database.
Sebagai solusinya, Anda dapat menginstal rilis layanan dengan menggunakan baris perintah dan menentukan MRCACHEDIRECTORY
argumen seperti yang ditunjukkan dalam contoh ini, yang menginstal pembaruan CU 1:
C:\<path to installation media>\SQLServer2016-KB3164674-x64.exe /Action=Patch /IACCEPTROPENLICENSETERMS /MRCACHEDIRECTORY=<path to CU 1 CAB files>
Untuk mendapatkan penginstal terbaru, lihat Menginstal komponen pembelajaran mesin tanpa akses internet.
Berlaku untuk: Layanan R SQL Server 2016 (13.x), dengan R Server versi 9.0.0 atau yang lebih lama
Layanan Launchpad gagal dimulai jika versinya berbeda dari versi R
Jika Anda menginstal SQL Server R Services secara terpisah dari mesin database, dan versi build berbeda, Anda mungkin melihat kesalahan berikut di log Peristiwa Sistem:
Layanan Launchpad SQL Server gagal dimulai karena kesalahan berikut: Layanan tidak merespons permintaan mulai atau kontrol secara tepat waktu.
Misalnya, kesalahan ini mungkin terjadi jika Anda menginstal mesin database dengan menggunakan versi rilis, menerapkan patch untuk meningkatkan mesin database, lalu menambahkan fitur Layanan R dengan menggunakan versi rilis.
Untuk menghindari masalah ini, gunakan utilitas seperti File Manager untuk membandingkan versi Launchpad.exe dengan versi biner SQL, seperti sqldk.dll
. Semua komponen harus memiliki nomor versi yang sama. Jika Anda meningkatkan satu komponen, pastikan untuk menerapkan peningkatan yang sama ke semua komponen terinstal lainnya.
Cari Launchpad di Binn
folder untuk instans. Misalnya, dalam penginstalan default SQL Server 2016 (13.x), jalurnya mungkin .C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn
Konteks komputasi jarak jauh diblokir oleh firewall di instans SQL Server yang berjalan di komputer virtual Azure
Jika Anda telah menginstal SQL Server pada komputer virtual Azure, Anda mungkin tidak dapat menggunakan konteks komputasi yang memerlukan penggunaan ruang kerja komputer virtual. Alasannya adalah bahwa, secara default, firewall di komputer virtual Azure menyertakan aturan yang memblokir akses jaringan untuk akun pengguna R lokal.
Sebagai solusinya, pada Azure VM, buka Windows Firewall dengan Keamanan Tingkat Lanjut, pilih Aturan Keluar, dan nonaktifkan aturan berikut: Blokir akses jaringan untuk akun pengguna lokal R di instans SQL Server MSSQLSERVER. Anda juga dapat membiarkan aturan diaktifkan, tetapi mengubah properti keamanan menjadi Izinkan jika aman.
Autentikasi tersirat dalam edisi Ekspres SQL Server 2016
Saat Anda menjalankan pekerjaan R dari stasiun kerja ilmu data jarak jauh dengan menggunakan autentikasi Windows Terintegrasi, SQL Server menggunakan autentikasi tersirat untuk menghasilkan panggilan ODBC lokal yang mungkin diperlukan oleh skrip. Namun, fitur ini tidak berfungsi di build RTM edisi Ekspres SQL Server 2016 (13.x).
Untuk memperbaiki masalah ini, kami sarankan Anda meningkatkan ke rilis layanan yang lebih baru. Jika peningkatan tidak memungkinkan, sebagai solusinya, gunakan login SQL untuk menjalankan pekerjaan R jarak jauh yang mungkin memerlukan panggilan ODBC yang disematkan.
Berlaku untuk: Edisi Ekspres Layanan R SQL Server 2016 (13.x)
Batas performa saat pustaka yang digunakan oleh SQL Server dipanggil dari alat lain
Dimungkinkan untuk memanggil pustaka pembelajaran mesin yang diinstal untuk SQL Server dari aplikasi eksternal, seperti RGui. Melakukannya mungkin cara paling mudah untuk menyelesaikan tugas tertentu, seperti menginstal paket baru, atau menjalankan pengujian ad hoc pada sampel kode yang sangat singkat. Namun, di luar SQL Server, performa mungkin terbatas.
Misalnya, bahkan jika Anda menggunakan SQL Server edisi Enterprise, R berjalan dalam mode utas tunggal saat Anda menjalankan kode R dengan menggunakan alat eksternal. Untuk mendapatkan manfaat performa di SQL Server, mulai koneksi SQL Server dan gunakan sp_execute_external_script untuk memanggil runtime skrip eksternal.
Secara umum, hindari memanggil pustaka pembelajaran mesin yang digunakan oleh SQL Server dari alat eksternal. Jika Anda perlu men-debug kode R atau Python, biasanya lebih mudah untuk melakukannya di luar SQL Server. Untuk mendapatkan pustaka yang sama yang ada di SQL Server, Anda dapat menginstal Klien Microsoft R atau SQL Server 2017 Pembelajaran Mesin Server (Mandiri).
Alat Data SQL Server tidak mendukung izin yang diperlukan oleh skrip eksternal
Saat Anda menggunakan Visual Studio atau SQL Server Data Tools untuk menerbitkan proyek database, jika ada prinsipal yang memiliki izin khusus untuk eksekusi skrip eksternal, Anda mungkin mendapatkan kesalahan seperti ini:
Model TSQL: Kesalahan terdeteksi saat merekayasa balik database. Izin tidak dikenali dan tidak diimpor.
Saat ini model DACPAC tidak mendukung izin yang digunakan oleh Layanan R atau Layanan Pembelajaran Mesin, seperti GRANT ANY EXTERNAL SCRIPT
, atau EXECUTE ANY EXTERNAL SCRIPT
. Masalah ini akan diperbaiki dalam rilis selanjutnya.
Sebagai solusinya, jalankan pernyataan tambahan GRANT
dalam skrip pasca-penyebaran.
Eksekusi skrip eksternal dibatasi karena nilai default tata kelola sumber daya
Di edisi Enterprise, Anda dapat menggunakan kumpulan sumber daya untuk mengelola proses skrip eksternal. Dalam beberapa build rilis awal, memori maksimum yang dapat dialokasikan untuk proses R adalah 20 persen. Oleh karena itu, jika server memiliki RAM 32 GB, R yang dapat dieksekusi (RTerm.exe
dan BxlServer.exe
) dapat menggunakan maksimum 6,4 GB dalam satu permintaan.
Jika Anda mengalami batasan sumber daya, periksa default saat ini. Jika 20 persen tidak cukup, lihat dokumentasi untuk SQL Server tentang cara mengubah nilai ini.
Berlaku untuk: SQL Server 2016 (13.x) R Services, edisi Enterprise
Kesalahan saat menggunakan sp_execute_external_script
tanpa libc++.so
di Linux
Pada komputer Linux bersih yang belum libc++.so
diinstal, menjalankan sp_execute_external_script
kueri (SPEES) dengan Java atau bahasa eksternal gagal karena commonlauncher.so
gagal memuat libc++.so
.
Contohnya:
EXECUTE sp_execute_external_script @language = N'Java'
, @script = N'JavaTestPackage.PassThrough'
, @parallel = 0
, @input_data_1 = N'select 1'
WITH RESULT SETS((col1 INT NOT NULL));
GO
Ini gagal dengan pesan yang mirip dengan yang berikut ini:
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Java' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Java' runtime.
Log mssql-launchpadd
akan menampilkan pesan kesalahan yang mirip dengan yang berikut ini:
Oct 18 14:03:21 sqlextmls launchpadd[57471]: [launchpad] 2019/10/18 14:03:21 WARNING: PopulateLauncher failed: Library /opt/mssql-extensibility/lib/commonlauncher.so not loaded. Error: libc++.so.1: cannot open shared object file: No such file or directory
Solusi Sementara
Anda dapat melakukan salah satu solusi berikut:
Salin
libc++*
dari/opt/mssql/lib
ke jalur sistem default/lib64
Tambahkan entri berikut untuk
/var/opt/mssql/mssql.conf
mengekspos jalur:[extensibility] readabledirectories = /opt/mssql
Berlaku untuk: SQL Server 2019 (15.x) di Linux
Kesalahan penginstalan atau peningkatan pada server yang diaktifkan FIPS
Jika Anda menginstal SQL Server 2019 (15.x) dengan fitur Pembelajaran Mesin Layanan dan Ekstensi Bahasa atau meningkatkan instans SQL Server pada server yang diaktifkan Federal Information Processing Standard (FIPS), Anda akan menerima kesalahan berikut:
Terjadi kesalahan saat menginstal fitur ekstensibilitas dengan pesan kesalahan: Pembuatan AppContainer Gagal dengan pesan kesalahan NONE, menyatakan Implementasi ini bukan bagian dari algoritma kriptografi yang divalidasi Windows Platform FIPS.
Solusi Sementara
Nonaktifkan FIPS sebelum penginstalan SQL Server 2019 (15.x) dengan fitur Pembelajaran Mesin Layanan dan Ekstensi Bahasa atau peningkatan instans SQL Server. Setelah penginstalan atau peningkatan selesai, Anda dapat mengaktifkan kembali FIPS.
Berlaku untuk: SQL Server 2019 (15.x)
Pustaka R menggunakan algoritma, streaming, atau partisi tertentu
Masalah
Batasan berikut berlaku pada SQL Server 2017 (14.x) dengan peningkatan runtime. Masalah ini berlaku untuk edisi Enterprise.
- Paralelisme:
RevoScaleR
danMicrosoftML
paralelisme utas algoritma untuk skenario dibatasi hingga maksimum dua utas. - Streaming & partisi: Skenario yang melibatkan
@r_rowsPerRead
parameter yang diteruskan ke T-SQLsp_execute_external_script
tidak diterapkan. - Streaming & partisi:
RevoScaleR
danMicrosoftML
sumber data (yaitu,ODBC
,XDF
) tidak mendukung baris baca dalam gugus untuk skenario pelatihan atau penilaian. Skenario ini selalu membawa semua data ke memori untuk komputasi dan operasi terikat memori
Solusi
Solusi terbaik adalah meningkatkan ke SQL Server 2019 (15.x). Atau Anda dapat terus menggunakan SQL Server 2017 (14.x) dengan peningkatan runtime yang dikonfigurasi menggunakan RegisterRext.exe /configure, setelah Anda menyelesaikan tugas berikut.
- Edit registri untuk membuat kunci
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150
dan menambahkan nilaiSharedCode
dengan dataC:\Program Files\Microsoft SQL Server\150\Shared
atau direktori bersama instans, seperti yang dikonfigurasi. - Buat folder
C:\Program Files\Microsoft SQL Server\150\Shared and copy instapi140.dll
dari folderC:\Program Files\Microsoft SQL Server\140\Shared
ke folder yang baru dibuat. - Ganti nama menjadi
instapi140.dll
instapi150.dll
di folderC:\Program Files\Microsoft SQL Server\150\Shared
baru .
Penting
Jika Anda melakukan langkah-langkah di atas, Anda harus menghapus kunci yang ditambahkan secara manual sebelum memutakhirkan ke versi SQL Server yang lebih baru.
Masalah performa Pengumpulan Proses di Layanan ML (R dan Python)
Bagian ini berisi masalah dan solusi yang diketahui untuk menggunakan layanan ML (R dan Python) di SQL Server.
Kinerja Awal Dingin Pengumpulan Proses di Layanan ML
Setelah eksekusi sp_execute_external_script
, layanan launchpad meluncurkan proses satelit yang memulai runtime eksternal seperti R dan Python. Untuk mengamortisasi biaya startup, kumpulan proses dibuat yang dapat digunakan dalam eksekusi berikutnya dari sp_execute_external_script
. Kumpulan proses ini khusus untuk pengguna ini, database, dan bahasa yang digunakan (R atau Python dalam Layanan ML).
Eksekusi kueri pertama
Proses satelit perlu dihangatkan ketika sp_execute_external_script
dijalankan untuk pertama kalinya atau setelah periode waktu diam (proses dihentikan melalui tugas pembersihan jika tidak digunakan untuk sementara waktu). Awal dingin dari proses terkumpulan tersebut mungkin lambat (misalnya, karena kendala sumber daya).
Solusi Sementara
Jika performa panggilan pertama penting, disarankan untuk menjaga kueri tetap hangat. Misalnya, tugas latar belakang dapat dijalankan yang mengaktifkan kueri sederhana sp_execute_external_script
sebelum proses kedaluwarsa. Misalnya, untuk menjaga kueri R tetap hangat, Anda dapat menjalankan kueri berikut secara berkala.
EXECUTE sp_execute_external_script @language = N'R', @script = N'';
GO
Jumlah kueri bersamaan yang tinggi
Jika jumlah eksekusi bersamaan sp_execute_external_script
lebih tinggi dari proses R/Python aktif di kumpulan, awal dingin menambahkan proses tambahan ke kumpulan mungkin lambat (misalnya, karena kendala sumber daya).
Solusi Sementara
Untuk mengatasi masalah performa penskalaan, beberapa permintaan dapat di-batch (misalnya, melalui koneksi loopback atau menulis ulang skrip untuk menangani beberapa permintaan). Selain itu, untuk skenario real time SQL PREDICT dapat digunakan.
Masalah eksekusi skrip R
Bagian ini berisi masalah umum yang khusus untuk menjalankan R di SQL Server, serta beberapa masalah yang terkait dengan pustaka R dan alat yang diterbitkan oleh Microsoft, termasuk RevoScaleR.
Untuk masalah tambahan yang diketahui yang mungkin memengaruhi solusi R, lihat situs server Pembelajaran Mesin.
Peringatan akses ditolak saat menjalankan skrip R di SQL Server di lokasi non default
Jika instans SQL Server telah diinstal ke lokasi non-default, seperti di luar Program Files
folder, ACCESS_DENIED peringatan dimunculkan saat Anda mencoba menjalankan skrip yang menginstal paket. Contohnya:
Di
normalizePath(path.expand(path), winslash, mustWork)
: path[2]="~ExternalLibraries/R/8/1": Akses ditolak
Alasannya adalah bahwa fungsi R mencoba membaca jalur, dan gagal jika grup pengguna bawaan SQLRUserGroup, tidak memiliki akses baca. Peringatan yang dimunculkan tidak memblokir eksekusi skrip R saat ini, tetapi peringatan mungkin berulang kali setiap kali pengguna menjalankan skrip R lainnya.
Jika Anda telah menginstal SQL Server ke lokasi default, kesalahan ini tidak terjadi, karena semua pengguna Windows memiliki izin baca pada Program Files
folder.
Masalah ini ditangani dalam rilis layanan yang akan datang. Sebagai solusinya, berikan grup, SQLRUserGroup, dengan akses baca untuk semua folder ExternalLibraries
induk .
Kesalahan serialisasi antara versi lama dan baru RevoScaleR
Saat Anda meneruskan model menggunakan format serial ke instans SQL Server jarak jauh, Anda mungkin mendapatkan kesalahan:
Kesalahan dalam memDecompress(data, type = decompress) kesalahan internal -3 di memDecompress(2).
Kesalahan ini muncul jika Anda menyimpan model menggunakan versi terbaru dari fungsi serialisasi, rxSerializeModel, tetapi instans SQL Server tempat Anda mendeserialisasi model memiliki versi API RevoScaleR yang lebih lama, dari SQL Server 2017 (14.x) CU 2 atau yang lebih lama.
Sebagai solusinya, Anda dapat meningkatkan instans SQL Server 2017 (14.x) ke CU 3 atau yang lebih baru.
Kesalahan tidak muncul jika versi API sama, atau jika Anda memindahkan model yang disimpan dengan fungsi serialisasi yang lebih lama ke server yang menggunakan versi API serialisasi yang lebih baru.
Dengan kata lain, gunakan versi RevoScaleR yang sama untuk operasi serialisasi dan deserialisasi.
Penilaian real-time tidak menangani parameter learningRate dengan benar dalam model pohon dan forest
Jika Anda membuat model menggunakan pohon keputusan atau metode hutan keputusan dan menentukan tingkat pembelajaran, Anda mungkin melihat hasil yang tidak konsisten saat menggunakan sp_rxpredict
atau fungsi SQL PREDICT
, dibandingkan dengan menggunakan rxPredict
.
Penyebabnya adalah kesalahan dalam API yang memproses model berseri, dan terbatas pada learningRate
parameter: misalnya, di rxBTrees, atau
Masalah ini ditangani dalam rilis layanan yang akan datang.
Batasan afinitas prosesor untuk pekerjaan R
Dalam build rilis awal SQL Server 2016 (13.x), Anda dapat mengatur afinitas prosesor hanya untuk CPU di k-group pertama. Misalnya, jika server adalah komputer 2 soket dengan dua k-grup, hanya prosesor dari k-group pertama yang digunakan untuk proses R. Batasan yang sama berlaku saat Anda mengonfigurasi tata kelola sumber daya untuk pekerjaan skrip R.
Masalah ini diperbaiki di Paket Layanan SQL Server 2016 (13.x) 1. Kami menyarankan agar Anda meningkatkan ke rilis layanan terbaru.
Berlaku untuk: Layanan R SQL Server 2016 (13.x) (versi RTM)
Perubahan pada jenis kolom tidak dapat dilakukan saat membaca data dalam konteks komputasi SQL Server
Jika konteks komputasi Anda diatur ke instans SQL Server, Anda tidak dapat menggunakan argumen colClasses (atau argumen serupa lainnya) untuk mengubah jenis data kolom dalam kode R Anda.
Misalnya, pernyataan berikut akan mengakibatkan kesalahan jika kolom CRSDepTimeStr belum menjadi bilangan bulat:
data <- RxSqlServerData(
sqlQuery = "SELECT CRSDepTimeStr, ArrDelay FROM AirlineDemoSmall",
connectionString = connectionString,
colClasses = c(CRSDepTimeStr = "integer"))
Sebagai solusinya, Anda dapat menulis ulang kueri SQL untuk menggunakan CAST
atau CONVERT
dan menyajikan data ke R dengan menggunakan tipe data yang benar. Secara umum, performa lebih baik ketika Anda bekerja dengan data dengan menggunakan SQL daripada dengan mengubah data dalam kode R.
Berlaku untuk: Layanan R SQL Server 2016 (13.x)
Batasan ukuran model berseri
Saat menyimpan model ke tabel SQL Server, Anda harus membuat serialisasi model dan menyimpannya dalam format biner. Secara teoritis ukuran maksimum model yang dapat disimpan dengan metode ini adalah 2 GB, yang merupakan ukuran maksimum kolom varbinary di SQL Server.
Jika Anda perlu menggunakan model yang lebih besar, solusi berikut tersedia:
Ambil langkah-langkah untuk mengurangi ukuran model Anda. Beberapa paket R sumber terbuka mencakup banyak informasi dalam objek model, dan banyak informasi ini dapat dihapus untuk penyebaran.
Gunakan pilihan fitur untuk menghapus kolom yang tidak perlu.
Jika Anda menggunakan algoritma sumber terbuka, pertimbangkan implementasi serupa menggunakan algoritma yang sesuai di MicrosoftML atau RevoScaleR. Paket ini telah dioptimalkan untuk skenario penyebaran.
Setelah model dirasinalisasi dan ukurannya berkurang menggunakan langkah-langkah sebelumnya, lihat apakah fungsi memCompress di dasar R dapat digunakan untuk mengurangi ukuran model sebelum meneruskannya ke SQL Server. Opsi ini paling baik ketika model mendekati batas 2 GB.
Untuk model yang lebih besar, Anda dapat menggunakan fitur FileTable SQL Server untuk menyimpan model, daripada menggunakan kolom varbinary.
Untuk menggunakan FileTables, Anda harus menambahkan pengecualian firewall, karena data yang disimpan dalam FileTables dikelola oleh driver sistem file Filestream di SQL Server, dan aturan firewall default memblokir akses file jaringan. Untuk informasi selengkapnya, lihat Mengaktifkan Prasyarat untuk FileTable.
Setelah mengaktifkan FileTable, untuk menulis model, Anda mendapatkan jalur dari SQL menggunakan API FileTable, lalu menulis model ke lokasi tersebut dari kode Anda. Ketika Anda perlu membaca model, Anda mendapatkan jalur dari SQL Server, lalu memanggil model menggunakan jalur dari skrip Anda. Untuk informasi selengkapnya, lihat Mengakses FileTables dengan API Input-Output File.
Hindari menghapus ruang kerja saat Anda menjalankan kode R dalam konteks komputasi SQL Server
Jika Anda menggunakan perintah R untuk menghapus ruang kerja objek saat menjalankan kode R dalam konteks komputasi SQL Server, atau jika Anda menghapus ruang kerja sebagai bagian dari skrip R yang disebut dengan menggunakan sp_execute_external_script, Anda mungkin mendapatkan kesalahan ini: revoScriptConnection objek ruang kerja tidak ditemukan
revoScriptConnection
adalah objek di ruang kerja R yang berisi informasi tentang sesi R yang dipanggil dari SQL Server. Namun, jika kode R Anda menyertakan perintah untuk menghapus ruang kerja (seperti rm(list=ls()))
, semua informasi tentang sesi dan objek lain di ruang kerja R juga dihapus.
Sebagai solusinya, hindari penghapusan variabel dan objek lain yang tidak sembarangan saat Anda menjalankan R di SQL Server. Meskipun membersihkan ruang kerja adalah hal umum saat bekerja di konsol R, itu dapat memiliki konsekuensi yang tidak diinginkan.
- Untuk menghapus variabel tertentu, gunakan fungsi R
remove
: misalnya,remove('name1', 'name2', ...)
- Jika ada beberapa variabel yang akan dihapus, simpan nama variabel sementara ke daftar dan lakukan pengumpulan sampah berkala.
Pembatasan data yang dapat disediakan sebagai input ke skrip R
Anda tidak dapat menggunakan dalam skrip R jenis hasil kueri berikut:
Data dari kueri Transact-SQL yang mereferensikan kolom AlwaysEncrypted.
Data dari kueri Transact-SQL yang mereferensikan kolom bertopeng.
Jika Anda perlu menggunakan data bertopeng dalam skrip R, solusi yang mungkin adalah membuat salinan data dalam tabel sementara dan menggunakan data tersebut sebagai gantinya.
Penggunaan string sebagai faktor dapat menyebabkan penurunan performa
Menggunakan variabel jenis string sebagai faktor dapat sangat meningkatkan jumlah memori yang digunakan untuk operasi R. Ini adalah masalah yang diketahui dengan R secara umum, dan ada banyak artikel tentang subjek. Misalnya, lihat Faktor bukan warga negara kelas satu di R, oleh John Mount, di R-blogger) atau stringsAsFactors: Biografi yang tidak sah, oleh Roger Peng.
Meskipun masalah ini tidak spesifik untuk SQL Server, masalah ini dapat sangat memengaruhi performa eksekusi kode R di SQL Server. String biasanya disimpan sebagai varchar atau nvarchar, dan jika kolom data string memiliki banyak nilai unik, proses mengonversinya secara internal menjadi bilangan bulat dan kembali ke string oleh R bahkan dapat menyebabkan kesalahan alokasi memori.
Jika Anda tidak benar-benar memerlukan jenis data string untuk operasi lain, memetakan nilai string ke jenis data numerik (bilangan bulat) sebagai bagian dari persiapan data akan bermanfaat dari perspektif performa dan skala.
Untuk diskusi tentang masalah ini, dan tips lainnya, lihat Performa untuk Layanan R - pengoptimalan data.
Argumen varsToKeep dan varsToDrop tidak didukung untuk sumber data SQL Server
Saat Anda menggunakan fungsi rxDataStep untuk menulis hasil ke tabel, menggunakan varsToKeep dan varsToDrop adalah cara yang berguna untuk menentukan kolom yang akan disertakan atau dikecualikan sebagai bagian dari operasi. Namun, argumen ini tidak didukung untuk sumber data SQL Server.
Dukungan terbatas untuk jenis data SQL di sp_execute_external_script
Tidak semua jenis data yang didukung di SQL dapat digunakan dalam R. Sebagai solusinya, pertimbangkan untuk mentransmisikan jenis data yang tidak didukung ke jenis data yang didukung sebelum meneruskan data ke sp_execute_external_script
.
Untuk informasi selengkapnya, lihat Pustaka R dan jenis data.
Kemungkinan kerusakan string menggunakan string Unicode di kolom varchar
Meneruskan data Unicode dalam kolom varchar dari SQL Server ke R/Python dapat mengakibatkan kerusakan string. Ini karena pengodean untuk string Unicode ini dalam kolase SQL Server mungkin tidak cocok dengan pengodean UTF-8 default yang digunakan dalam R/Python.
Untuk mengirim data string non-ASCII dari SQL Server ke R/Python, gunakan pengodean UTF-8 (tersedia di SQL Server 2019 (15.x)) atau gunakan jenis nvarchar untuk hal yang sama.
Hanya satu nilai jenis raw
yang dapat dikembalikan dari sp_execute_external_script
Ketika jenis data biner (jenis data mentah R) dikembalikan dari R, nilai harus dikirim dalam bingkai data output.
Dengan jenis data selain mentah, Anda dapat mengembalikan nilai parameter bersama dengan hasil prosedur tersimpan dengan menambahkan kata kunci OUTPUT. Untuk informasi selengkapnya, lihat Parameter.
Jika Anda ingin menggunakan beberapa set output yang menyertakan nilai jenis mentah, salah satu solusi yang mungkin adalah melakukan beberapa panggilan prosedur tersimpan, atau untuk mengirim kumpulan hasil kembali ke SQL Server dengan menggunakan ODBC.
Hilangnya presisi
Karena Transact-SQL dan R mendukung berbagai jenis data, jenis data numerik dapat mengalami hilangnya presisi selama konversi.
Untuk informasi selengkapnya tentang konversi jenis data implisit, lihat Pustaka R dan jenis data.
Kesalahan cakupan variabel saat Anda menggunakan parameter transformFunc
Untuk mengubah data saat Anda memodelkan, Anda dapat meneruskan argumen transformFunc dalam fungsi seperti rxLinmod
atau rxLogit
. Namun, panggilan fungsi berlapis dapat menyebabkan kesalahan cakupan dalam konteks komputasi SQL Server, bahkan jika panggilan berfungsi dengan benar dalam konteks komputasi lokal.
Himpunan data sampel untuk analisis tidak memiliki variabel
Misalnya, asumsikan bahwa Anda telah menentukan dua fungsi, f
dan g
, di lingkungan global lokal Anda, dan g
memanggil f
. Dalam panggilan terdistribusi atau jarak jauh yang melibatkan g
, panggilan ke g
mungkin gagal dengan kesalahan ini, karena f
tidak dapat ditemukan, bahkan jika Anda telah melewati dan f
g
ke panggilan jarak jauh.
Jika Anda mengalami masalah ini, Anda dapat mengatasi masalah dengan menyematkan definisi f
di dalam definisi Anda , g
di mana saja sebelum g
biasanya memanggil f
.
Contohnya:
f <- function(x) { 2*x * 3 }
g <- function(y) {
a <- 10 * y
f(a)
}
Untuk menghindari kesalahan, tulis ulang definisi sebagai berikut:
g <- function(y){
f <- function(x) { 2*x +3}
a <- 10 * y
f(a)
}
Impor dan manipulasi data menggunakan RevoScaleR
Saat kolom varchar dibaca dari database, spasi kosong dipangkas. Untuk mencegah hal ini, sertakan string dalam karakter spasi non-putih.
Ketika fungsi seperti rxDataStep
digunakan untuk membuat tabel database yang memiliki kolom varchar , lebar kolom diperkirakan berdasarkan sampel data. Jika lebar dapat bervariasi, mungkin perlu untuk mengayuh semua string ke panjang yang sama.
Menggunakan transformasi untuk mengubah jenis data variabel tidak didukung saat panggilan berulang ke rxImport
atau rxTextToXdf
digunakan untuk mengimpor dan menambahkan baris, menggabungkan beberapa file input ke dalam satu file .xdf.
Dukungan terbatas untuk rxExec
Dalam SQL Server 2016 (13.x), rxExec
fungsi yang disediakan oleh paket RevoScaleR hanya dapat digunakan dalam mode utas tunggal.
Tingkatkan ukuran parameter maksimum untuk mendukung rxGetVarInfo
Jika Anda menggunakan himpunan data dengan jumlah variabel yang sangat besar (misalnya, lebih dari 40.000), atur max-ppsize
bendera saat Anda memulai R untuk menggunakan fungsi seperti rxGetVarInfo
. Bendera max-ppsize
menentukan ukuran maksimum tumpukan perlindungan pointer.
Jika Anda menggunakan konsol R (misalnya, RGui.exe atau RTerm.exe), Anda dapat mengatur nilai max-ppsize ke 500000 dengan mengetik:
R --max-ppsize=500000
Masalah dengan fungsi rxDTree
Fungsi rxDTree
saat ini tidak mendukung transformasi dalam rumus. Secara khusus, menggunakan F()
sintaks untuk membuat faktor dengan cepat tidak didukung. Namun, data numerik secara otomatis diikat.
Faktor yang diurutkan diperlakukan sama dengan faktor-faktor dalam semua fungsi analisis RevoScaleR kecuali rxDTree
.
data.table
sebagai OutputDataSet dalam R
Penggunaan data.table
sebagai OutputDataSet
dalam R tidak didukung di SQL Server 2017 (14.x) Pembaruan Kumulatif 13 (CU 13) dan yang lebih lama. Pesan berikut mungkin muncul:
Msg 39004, Level 16, State 20, Line 2
A 'R' script error occurred during execution of
'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 2, Line 2
An external script error occurred:
Error in alloc.col(newx) :
Internal error: length of names (0) is not length of dt (11)
Calls: data.frame ... as.data.frame -> as.data.frame.data.table -> copy -> alloc.col
Error in execution. Check the output for more information.
Error in eval(expr, envir, enclos) :
Error in execution. Check the output for more information.
Calls: source -> withVisible -> eval -> eval -> .Call
Execution halted
data.table
OutputDataSet
sebagai dalam R didukung di SQL Server 2017 (14.x) Pembaruan Kumulatif 14 (CU 14) dan yang lebih baru.
Menjalankan skrip panjang gagal saat menginstal pustaka
Menjalankan sesi skrip eksternal yang berjalan lama dan meminta dbo secara paralel mencoba menginstal pustaka pada database yang berbeda dapat mengakhiri skrip.
Misalnya, menjalankan skrip eksternal ini terhadap master
database:
USE MASTER
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(max) = N'Sys.sleep(100)'
DECLARE @input_data_1 nvarchar(max) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1 with result sets none
go
Sementara dbo secara paralel menginstal pustaka di LibraryManagementFunctional:
USE [LibraryManagementFunctional]
go
CREATE EXTERNAL LIBRARY [RODBC] FROM (CONTENT = N'/home/ani/var/opt/mssql/data/RODBC_1.3-16.tar.gz') WITH (LANGUAGE = 'R')
go
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(14) = N'library(RODBC)'
DECLARE @input_data_1 nvarchar(8) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1
go
Skrip eksternal yang berjalan lama sebelumnya terhadap master
database akan berakhir dengan pesan kesalahan berikut:
Kesalahan skrip 'R' terjadi selama eksekusi 'sp_execute_external_script' dengan 0x800704d4 HRESULT.
Solusi Sementara
Jangan jalankan penginstalan pustaka secara paralel dengan kueri yang berjalan lama. Atau jalankan ulang kueri yang berjalan lama setelah penginstalan selesai.
Berlaku untuk: SQL Server 2019 (15.x) di Linux &Kluster Big Data saja.
SQL Server berhenti merespons saat menjalankan skrip R yang berisi eksekusi paralel
SQL Server 2019 (15.x) berisi regresi yang memengaruhi skrip R yang menggunakan eksekusi paralel. Contohnya termasuk menggunakan rxExec
dengan RxLocalPar
konteks komputasi dan skrip yang menggunakan paket paralel. Masalah ini disebabkan oleh kesalahan yang ditemui paket paralel saat menulis ke perangkat null saat menjalankan di SQL Server.
Berlaku untuk: SQL Server 2019 (15.x).
Kerugian presisi untuk jenis data uang/numerik/desimal/bigint
Menjalankan skrip R dengan sp_execute_external_script
memungkinkan jenis data uang, numerik, desimal, dan bigint sebagai data input. Namun, karena dikonversi ke jenis numerik R, mereka mengalami kerugian presisi dengan nilai yang sangat tinggi atau memiliki nilai titik desimal.
- uang: Terkadang nilai sen tidak tepat dan peringatan akan dikeluarkan: Peringatan: tidak dapat secara tepat mewakili nilai sen.
- numerik/desimal:
sp_execute_external_script
dengan skrip R tidak mendukung rentang lengkap jenis data tersebut dan akan mengubah beberapa digit desimal terakhir terutama yang memiliki pecahan. - bigint: R hanya mendukung hingga bilangan bulat 53-bit dan kemudian akan mulai mengalami kehilangan presisi.
Masalah dengan fungsi rxExecBy - fungsi rxExecBy tidak dapat menemukan paket yang diinstal
Ketika fungsi dipanggil rxExecBy
, proses runtime R baru dimulai. Proses baru ini tidak memiliki jalur pustaka yang diperbarui, oleh karena itu, paket yang diinstal di lokasi selain jalur pustaka default tidak ditemukan selama eksekusi.
Solusi Sementara
Jalur ke paket R perlu diperbarui secara eksplisit. Misalkan paket diinstal di jalur pustaka eksternal, skrip R berikut dapat digunakan untuk memperbarui jalur pustaka: .libPaths(c(Sys.getenv("MRS_EXTLIB_USER_PATH"), Sys.getenv("MRS_EXTLIB_SHARED_PATH"), .libPaths()))
Masalah eksekusi skrip Python
Bagian ini berisi masalah umum yang khusus untuk menjalankan Python di SQL Server, serta masalah yang terkait dengan paket Python yang diterbitkan oleh Microsoft, termasuk revoscalepy dan microsoftml.
Panggilan ke model yang telah dilatih sebelumnya gagal jika jalur ke model terlalu panjang
Jika Anda menginstal model yang telah dilatih sebelumnya dalam rilis awal SQL Server 2017 (14.x), jalur lengkap ke file model terlatih mungkin terlalu lama untuk dibaca Python. Batasan ini diperbaiki dalam rilis layanan selanjutnya.
Ada beberapa solusi potensial:
- Saat Anda menginstal model yang telah dilatih sebelumnya, pilih lokasi kustom.
- Jika memungkinkan, instal instans SQL Server di bawah jalur penginstalan kustom dengan jalur yang lebih pendek, seperti
C:\SQL\MSSQL14.MSSQLSERVER
. - Gunakan Fsutil utilitas Windows untuk membuat tautan keras yang memetakan file model ke jalur yang lebih pendek.
- Perbarui ke rilis layanan terbaru.
Kesalahan saat menyimpan model serial ke SQL Server
Ketika Anda meneruskan model ke instans SQL Server jarak jauh, dan mencoba membaca model biner menggunakan rx_unserialize
fungsi dalam revoscalepy, Anda mungkin mendapatkan kesalahan:
NameError: nama 'rx_unserialize_model' tidak ditentukan
Kesalahan ini muncul jika Anda menyimpan model menggunakan versi terbaru dari fungsi serialisasi, tetapi instans SQL Server tempat Anda mendeserialisasi model tidak mengenali API serialisasi.
Untuk mengatasi masalah ini, tingkatkan instans SQL Server 2017 (14.x) ke CU 3 atau yang lebih baru.
Kegagalan untuk menginisialisasi variabel varbinary menyebabkan kesalahan dalam BxlServer
Jika Anda menjalankan kode Python di SQL Server menggunakan sp_execute_external_script
, dan kode memiliki variabel output jenis varbinary(max), varchar(max) atau jenis serupa, variabel harus diinisialisasi atau diatur sebagai bagian dari skrip Anda. Jika tidak, komponen pertukaran data, BxlServer, menimbulkan kesalahan dan berhenti bekerja.
Batasan ini akan diperbaiki dalam rilis layanan mendatang. Sebagai solusinya, pastikan variabel diinisialisasi dalam skrip Python. Nilai valid apa pun dapat digunakan, seperti dalam contoh berikut:
declare @b varbinary(max);
exec sp_execute_external_script
@language = N'Python'
, @script = N'b = 0x0'
, @params = N'@b varbinary(max) OUTPUT'
, @b = @b OUTPUT;
go
declare @b varchar(30);
exec sp_execute_external_script
@language = N'Python'
, @script = N' b = "" '
, @params = N'@b varchar(30) OUTPUT'
, @b = @b OUTPUT;
go
Peringatan telemetri tentang keberhasilan eksekusi kode Python
Dimulai dengan SQL Server 2017 (14.x) CU 2, pesan berikut mungkin muncul bahkan jika kode Python berhasil dijalankan:
Pesan STDERR dari skrip eksternal:~PYTHON_SERVICES\lib\site-packages\revoscalepy\utils\RxTelemetryLoggerSintaksWarning: telemetry_state digunakan sebelum deklarasi global
Masalah ini telah diperbaiki di SQL Server 2017 (14.x) Pembaruan Kumulatif 3 (CU 3).
Jenis data numerik, desimal, dan uang tidak didukung
Dimulai dengan SQL Server 2017 (14.x) Pembaruan Kumulatif 12 (CU 12), jenis data numerik, desimal, dan uang di WITH RESULT SETS tidak didukung saat menggunakan Python dengan sp_execute_external_script
. Pesan berikut mungkin muncul:
[Kode: 39004, Status SQL: S1000] Kesalahan skrip 'Python' terjadi selama eksekusi 'sp_execute_external_script' dengan 0x80004004 HRESULT.
[Kode: 39019, Status SQL: S1000] Terjadi kesalahan skrip eksternal:
Kesalahan SqlSatelliteCall: Jenis yang tidak didukung dalam skema output. Jenis yang didukung: bit, smallint, int, datetime, smallmoney, real dan float. char, varchar didukung sebagian.
Ini telah diperbaiki di SQL Server 2017 (14.x) Pembaruan Kumulatif 14 (CU 14).
Kesalahan penerjemah buruk saat menginstal paket Python dengan pip di Linux
Pada SQL Server 2019 (15.x), jika Anda mencoba menggunakan pip. Contohnya:
/opt/mssql/mlservices/runtime/python/bin/pip -h
Anda kemudian akan mendapatkan kesalahan ini:
bash: /opt/mssql/mlservices/runtime/python/bin/pip: /opt/microsoft/mlserver/9.4.7/bin/python/python: penerjemah buruk: Tidak ada file atau direktori seperti itu
Solusi Sementara
Instal pip dari Python Package Authority (PyPA):
wget 'https://bootstrap.pypa.io/get-pip.py'
/opt/mssql/mlservices/bin/python/python ./get-pip.py
Rekomendasi
Lihat Menginstal paket Python dengan sqlmlutils.
Berlaku untuk: SQL Server 2019 (15.x) di Linux
Tidak dapat menginstal paket Python menggunakan pip
setelah menginstal SQL Server 2019 di Windows
Setelah menginstal SQL Server 2019 (15.x) di Windows, mencoba menginstal paket python melalui pip dari baris perintah DOS akan gagal. Contohnya:
pip install quantfolio
Ini akan mengembalikan kesalahan berikut:
pip dikonfigurasi dengan lokasi yang memerlukan TLS/SSL, namun modul ssl di Python tidak tersedia.
Ini adalah masalah khusus untuk paket Anaconda. Ini akan diperbaiki dalam rilis layanan mendatang.
Solusi Sementara
Salin file berikut:
libssl-1_1-x64.dll
libcrypto-1_1-x64.dll
dari folder
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin
ke folder
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs
Kemudian buka prompt shell perintah DOS baru.
Berlaku untuk: SQL Server 2019 (15.x) di Windows
Kesalahan saat menggunakan sp_execute_external_script
tanpa libc++abo.so
di Linux
Pada komputer Linux bersih yang belum libc++abi.so
diinstal, menjalankan sp_execute_external_script
kueri (SPEES) gagal dengan kesalahan "Tidak ada file atau direktori seperti itu".
Contohnya:
EXEC sp_execute_external_script
@language = N'Python'
, @script = N'
OutputDataSet = InputDataSet'
, @input_data_1 = N'select 1'
, @input_data_1_name = N'InputDataSet'
, @output_data_1_name = N'OutputDataSet'
WITH RESULT SETS (([output] int not null));
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Python' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Python' runtime.
STDERR message(s) from external script:
Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.
SqlSatelliteCall error: Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.
STDOUT message(s) from external script:
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/computecontext/RxInSqlServer.py", line 605, in rx_sql_satellite_call
rx_native_call("SqlSatelliteCall", params)
File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/RxSerializable.py", line 375, in rx_native_call
ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.
Total execution time: 00:01:00.387
Solusi Sementara
Jalankan perintah berikut:
sudo cp /opt/mssql/lib/libc++abi.so.1 /opt/mssql-extensibility/lib/
Berlaku untuk: SQL Server 2019 (15.x) di Linux
Kesalahan umum saat berjalan sp_execute_external_script
di Ubuntu 20.04 dengan SQL Server 2022 CU6 di Linux
Menginstal SQL Server 2022 CU6 untuk Linux di Ubuntu 20.04 dapat mengakibatkan kesalahan berikut saat menjalankan sp_execute_external_script
skrip R dan Python:
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'R' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'R' runtime.
STDERR message(s) from external script:
/usr/lib/R/library/RevoScaleR/rxLibs/x64/libExaCore.so.2(_Z21CriticalSignalHandleri+0x29)[0x7f2568289d89]
/usr/lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f2568d66090]
Solusi Sementara
Jalankan perintah berikut untuk menginstal dependensi libssl-dev
paket , yang memungkinkan SQL Server untuk menyelesaikan pustaka libssl
bersama yang disediakan sistem dan libcrypto
.
sudo apt-get update
sudo apt-get install libssl-dev
Kesalahan pembuatan aturan firewall saat modprobe
berjalan mssql-launchpadd
di Linux
Saat melihat log penggunaan mssql-launchpadd
sudo journalctl -a -u mssql-launchpadd
, Anda mungkin melihat kesalahan pembuatan aturan firewall yang mirip dengan output berikut.
-- Logs begin at Sun 2021-03-28 12:03:30 PDT, end at Wed 2022-10-12 13:20:17 PDT. --
Mar 22 16:57:51 sqlVm systemd[1]: Started Microsoft SQL Server Extensibility Launchpad Daemon.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Extensibility Log Header: <timestamp> <process> <sandboxId> <sessionId> <message>
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: No extensibility section in /var/opt/mssql/mssql.conf file. Using default settings.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: DataDirectories = /bin:/etc:/lib:/lib32:/lib64:/sbin:/usr/bin:/usr/include:/usr/lib:/usr/lib32:/usr/lib64:/usr/libexec/gcc:/usr/sbin:/usr/share:/var/lib:/opt/microsoft:/opt/mssql-extensibility:/opt/mssql/mlservices:/opt/mssql/lib/zulu-jre-11:/opt/mssql-tools
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: [RG] SQL Extensibility Cgroup initialization is done.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Found 1 IP address(es) from the bridge.
Mar 22 16:57:51 sqlVm launchpadd[195676]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195673]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195673]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195678]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195677]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195677]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195670]: 2022/03/22 16:57:51 [setnetbr] ERROR: Failed to set firewall rules: exit status 3
Solusi Sementara
Jalankan perintah berikut untuk mengonfigurasi modprobe
, dan mulai ulang layanan Launchpad SQL Server:
sudo modprobe ip6_tables
sudo systemctl restart mssql-launchpadd
Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru di Linux
Tidak dapat menginstal tensorflow
paket menggunakan sqlmlutils
Paket sqlmlutils digunakan untuk menginstal paket Python di SQL Server 2019 (15.x). Anda perlu mengunduh, menginstal, dan memperbarui Microsoft Visual C++ 2015-2019 Redistributable (x64). Namun, tensorflow
paket tidak dapat diinstal menggunakan sqlmlutils. Paket tensorflow
tergantung pada versi yang lebih baru dari numpy
versi yang diinstal di SQL Server. Namun, numpy
adalah paket sistem yang telah diinstal sebelumnya yang sqlmlutils
tidak dapat diperbarui saat mencoba menginstal tensorflow
.
Solusi Sementara
Dengan menggunakan perintah dalam mode administrator, jalankan perintah berikut, ganti "MSSQLSERVER" dengan nama instans SQL Anda:
"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe" -m pip install --upgrade tensorflow
Jika Anda mendapatkan kesalahan "TLS/SSL", lihat 7. Tidak dapat menginstal paket Python menggunakan pip sebelumnya di artikel ini.
Berlaku untuk: SQL Server 2019 (15.x) di Windows
Revolusi R Enterprise dan Microsoft R Open
Bagian ini mencantumkan masalah khusus untuk konektivitas R, pengembangan, dan alat performa yang disediakan oleh Analitik Revolusi. Alat-alat ini disediakan di versi pra-rilis SQL Server sebelumnya.
Secara umum, kami sarankan Anda menghapus instalan versi sebelumnya ini dan menginstal versi terbaru SQL Server atau Microsoft R Server.
Revolusi R Enterprise tidak didukung
Menginstal Revolution R Enterprise berdampingan dengan versi R Services (In-Database) apa pun tidak didukung.
Jika Anda memiliki lisensi yang ada untuk Revolution R Enterprise, Anda harus meletakkannya di komputer terpisah dari instans SQL Server dan stasiun kerja apa pun yang ingin Anda gunakan untuk menyambungkan ke instans SQL Server.
Beberapa versi pra-rilis R Services (In-Database) menyertakan lingkungan pengembangan R untuk Windows yang dibuat oleh Revolution Analytics. Alat ini tidak lagi disediakan, dan tidak didukung.
Untuk kompatibilitas dengan R Services (In-Database), kami sarankan Anda menginstal Klien Microsoft R sebagai gantinya. R Tools for Visual Studio dan Visual Studio Code juga mendukung solusi Microsoft R.
Masalah kompatibilitas dengan driver ODBC SQLite dan RevoScaleR
Revisi 0.92 driver ODBC SQLite tidak kompatibel dengan RevoScaleR. Revisi 0.88-0.91 dan 0.93 dan yang lebih baru diketahui kompatibel.