Mengumpulkan data untuk memecahkan masalah skrip Python dan R dengan 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 cara mengumpulkan data yang Anda butuhkan saat mencoba mengatasi masalah di SQL Server Pembelajaran Mesin Services. Data ini dapat berguna baik Anda menyelesaikan masalah sendiri atau dengan bantuan dukungan pelanggan Microsoft.

Versi dan edisi SQL Server

SQL Server 2016 R Services adalah rilis pertama SQL Server yang menyertakan dukungan R terintegrasi. SQL Server 2016 Service Pack 1 (SP1) mencakup beberapa peningkatan besar, termasuk kemampuan untuk menjalankan skrip eksternal. Jika Anda menggunakan SQL Server 2016, Anda harus mempertimbangkan untuk menginstal SP1 atau yang lebih baru.

SQL Server 2017 dan yang lebih baru memiliki integrasi bahasa Python. Anda tidak bisa mendapatkan integrasi fitur Python di rilis sebelumnya.

Bergantung pada edisi SQL Server yang Anda gunakan, beberapa fungsi pembelajaran mesin mungkin tidak tersedia, atau terbatas.

Versi bahasa dan alat R

Secara umum, versi Microsoft R yang diinstal saat Anda memilih fitur Layanan R atau fitur Layanan Pembelajaran Mesin ditentukan oleh nomor build SQL Server. Jika Anda meningkatkan atau menambal SQL Server, Anda juga harus meningkatkan atau menambal komponen R-nya.

Untuk daftar rilis dan tautan ke unduhan komponen R, lihat Menginstal komponen pembelajaran mesin tanpa akses internet. Pada komputer dengan akses internet, versi R yang diperlukan diidentifikasi dan diinstal secara otomatis.

Dimungkinkan untuk meningkatkan komponen R Server secara terpisah dari mesin database SQL Server, dalam proses yang dikenal sebagai pengikatan. Oleh karena itu, versi R yang Anda gunakan saat menjalankan kode R di SQL Server mungkin berbeda tergantung pada versi SQL Server yang diinstal dan apakah Anda telah memigrasikan server ke versi R terbaru.

Menentukan versi R

Cara term mudah untuk menentukan versi R adalah dengan mendapatkan properti runtime dengan menjalankan pernyataan seperti berikut:

EXECUTE sp_execute_external_script
       @language = N'R'
       , @script = N'
# Transform R version properties to data.frame
OutputDataSet <- data.frame(
  property_name = c("R.version", "Revo.version"),
  property_value = c(R.Version()$version.string, Revo.version$version.string),
  stringsAsFactors = FALSE)
# Retrieve properties like R.home, libPath & default packages
OutputDataSet <- rbind(OutputDataSet, data.frame(
  property_name = c("R.home", "libPaths", "defaultPackages"),
  property_value = c(R.home(), .libPaths(), paste(getOption("defaultPackages"), collapse=", ")),
  stringsAsFactors = FALSE)
)
'
WITH RESULT SETS ((PropertyName nvarchar(100), PropertyValue nvarchar(4000)));

Tip

Jika Layanan R tidak berfungsi, coba jalankan hanya bagian skrip R dari RGui.

Sebagai upaya terakhir, Anda dapat membuka file di server untuk menentukan versi yang diinstal. Untuk melakukannya, temukan file rlauncher.config untuk mendapatkan lokasi runtime R dan direktori kerja saat ini. Kami menyarankan agar Anda membuat dan membuka salinan file sehingga Anda tidak secara tidak sengaja mengubah properti apa pun.

  • SQL Server 2016

    C:\Program Files\Microsoft SQL Server\MSSQL13.<instance_name\MSSQL\Binn\rlauncher.config

  • SQL Server 2017

    C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Binn\rlauncher.config

Untuk mendapatkan versi R dan versi RevoScaleR, buka prompt perintah R, atau buka RGui yang terkait dengan instans.

  • SQL Server 2016

    C:\Program Files\Microsoft SQL Server\MSSQL13.<instancename>\R_SERVICES\bin\x64\RGui.exe

  • SQL Server 2017

    C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\R_SERVICES\bin\x64\RGui.exe

Konsol R menampilkan informasi versi saat startup. Misalnya, versi berikut mewakili konfigurasi default untuk SQL Server 2017:

*Microsoft R Open 3.3.3*

*The enhanced R distribution from Microsoft*

*Microsoft packages Copyright (C) 2017 Microsoft*

*Loading Microsoft R Server packages, version 9.1.0.*

Versi Python

Ada beberapa cara untuk mendapatkan versi Python. Cara term mudah adalah menjalankan pernyataan ini dari Management Studio atau alat kueri SQL lainnya:

-- Get Python runtime properties:
exec sp_execute_external_script
       @language = N'Python'
       , @script = N'
import sys
import pkg_resources
OutputDataSet = pandas.DataFrame(
                    {"property_name": ["Python.home", "Python.version", "Revo.version", "libpaths"],
                    "property_value": [sys.executable[:-10], sys.version, pkg_resources.get_distribution("revoscalepy").version, str(sys.path)]}
)
'
with WITH RESULT SETS (SQL keywords) ((PropertyName nvarchar(100), PropertyValue nvarchar(4000)));

Jika Pembelajaran Mesin Services tidak berjalan, Anda dapat menentukan versi Python yang diinstal dengan melihat file pythonlauncher.config. Kami menyarankan agar Anda membuat dan membuka salinan file sehingga Anda tidak secara tidak sengaja mengubah properti apa pun.

  1. Hanya untuk SQL Server 2017: C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Log\ExtensibilityLog\pythonlauncher.config
  2. Dapatkan nilai untuk PYTHONHOME.
  3. Dapatkan nilai direktori kerja saat ini.

Catatan

Jika Anda telah menginstal Python dan R di SQL Server 2017, direktori kerja dan kumpulan akun pekerja dibagikan untuk bahasa R dan Python.

Apakah beberapa instans R atau Python terinstal?

Periksa untuk melihat apakah lebih dari satu salinan pustaka R diinstal pada komputer. Duplikasi ini dapat terjadi jika:

  • Selama penyiapan, Anda memilih Layanan R (Dalam Database) dan Server R (Mandiri).
  • Anda menginstal Klien Microsoft R selain SQL Server.
  • Sekumpulan pustaka R yang berbeda diinstal dengan menggunakan R Tools untuk Visual Studio, R Studio, Microsoft R Client, atau IDE R lainnya.
  • Komputer menghosting beberapa instans SQL Server, dan lebih dari satu instans menggunakan pembelajaran mesin.

Kondisi yang sama berlaku untuk Python.

Jika Anda menemukan bahwa beberapa pustaka atau runtime diinstal, pastikan Anda hanya mendapatkan kesalahan yang terkait dengan runtime Python atau R yang digunakan oleh instans SQL Server.

Asal kesalahan

Kesalahan yang Anda lihat saat mencoba menjalankan kode R dapat berasal dari salah satu sumber berikut:

  • Mesin database SQL Server, termasuk prosedur tersimpan sp_execute_external_script
  • Launchpad Tepercaya SQL Server
  • Komponen lain dari kerangka kerja ekstensibilitas, termasuk peluncur R dan Python dan proses satelit
  • Penyedia, seperti Microsoft Open Database Koneksi ivity (ODBC)
  • Bahasa R

Ketika Anda bekerja dengan layanan untuk pertama kalinya, mungkin sulit untuk mengetahui pesan mana yang berasal dari layanan mana. Kami menyarankan agar Anda mengambil tidak hanya teks pesan yang tepat, tetapi konteks di mana Anda melihat pesan. Perhatikan perangkat lunak klien yang Anda gunakan untuk menjalankan kode pembelajaran mesin:

  • Apakah Anda menggunakan Management Studio? Aplikasi eksternal?
  • Apakah Anda menjalankan kode R di klien jarak jauh, atau langsung dalam prosedur tersimpan?

File log SQL Server

Dapatkan ERRORLOG SQL Server terbaru. Kumpulan lengkap log kesalahan terdiri dari file dari direktori log default berikut:

  • SQL Server 2016

    C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Log\ExtensibilityLog

  • SQL Server 2017

    C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2016\MSSQL\Log\ExtensibilityLog

Catatan

Nama folder yang tepat berbeda tergantung pada nama instans.

Kesalahan yang dikembalikan oleh sp_execute_external_script

Dapatkan teks lengkap kesalahan yang dikembalikan, jika ada, saat Anda menjalankan perintah sp_execute_external_script.

Untuk menghapus masalah R atau Python dari pertimbangan, Anda dapat menjalankan skrip ini, yang memulai runtime R atau Python dan meneruskan data bolak-balik.

Untuk R

exec sp_execute_external_script @language =N'R',  
@script=N'OutputDataSet<-InputDataSet',  
@input_data_1 =N'select 1 as hello'  
with result sets (([hello] int not null));  
go

Untuk Python

exec sp_execute_external_script @language =N'Python',  
@script=N'OutputDataSet= InputDataSet',  
@input_data_1 =N'select 1 as hello'  
with result sets (([hello] int not null));  
go

Kesalahan yang dihasilkan oleh kerangka kerja ekstensibilitas

SQL Server menghasilkan log terpisah untuk runtime bahasa skrip eksternal. Kesalahan ini tidak dihasilkan oleh bahasa Python atau R. Mereka dihasilkan dari komponen ekstensibilitas di SQL Server, termasuk peluncur khusus bahasa dan proses satelit mereka.

Anda bisa mendapatkan log ini dari lokasi default berikut:

  • SQL Server 2016

    C:\Program Files\Microsoft SQL Server\MSSQL13.<instance_name>\MSSQL\Log\ExtensibilityLog

  • SQL Server 2017

    C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Log\ExtensibilityLog

Catatan

Nama folder yang tepat berbeda berdasarkan nama instans. Bergantung pada konfigurasi Anda, folder mungkin berada di drive yang berbeda.

Misalnya, pesan log berikut terkait dengan kerangka kerja ekstensibilitas:

  • LogonUser Gagal untuk MSSQLSERVER01 pengguna

    Ini mungkin menunjukkan bahwa akun pekerja yang menjalankan skrip eksternal tidak dapat mengakses instans.

  • InitializePhysicalUsersPool Gagal

    Pesan ini mungkin berarti bahwa pengaturan keamanan Anda mencegah penyiapan membuat kumpulan akun pekerja yang diperlukan untuk menjalankan skrip eksternal.

  • Inisialisasi Security Context Manager gagal

  • Inisialisasi Manajer Sesi Satelit gagal

Peristiwa sistem

  1. Buka Windows Pemantau Peristiwa, dan cari log Peristiwa Sistem untuk pesan yang menyertakan launchpad string.
  2. Buka file ExtLaunchErrorlog, dan cari string ErrorCode. Tinjau pesan yang terkait dengan ErrorCode.

Misalnya, pesan berikut adalah kesalahan sistem umum yang terkait dengan kerangka kerja ekstensibilitas SQL Server:

  • Layanan SQL Server Launchpad (MSSQLSERVER) gagal dimulai karena kesalahan berikut: <teks>

  • Layanan tidak menanggapi permintaan mulai atau kontrol secara tepat waktu.

  • Batas waktu tercapai (120000 milidetik) saat menunggu layanan SQL Server Launchpad (MSSQLSERVER) tersambung.

File cadangan

Jika Anda mengetahui tentang penelusuran kesalahan, Anda dapat menggunakan file cadangan untuk menganalisis kegagalan di Launchpad.

  1. Temukan folder yang berisi log bootstrap penyiapan untuk SQL Server. Misalnya, di SQL Server 2016, jalur defaultnya adalah C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log.
  2. Buka subfolder log bootstrap yang khusus untuk ekstensibilitas.
  3. Jika Anda perlu mengirimkan permintaan dukungan, tambahkan seluruh konten folder ini ke file zip. Misalnya, C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\LOG\ExtensibilityLog.

Lokasi yang tepat mungkin berbeda pada sistem Anda, dan mungkin berada di drive selain drive C Anda. Pastikan untuk mendapatkan log untuk instans tempat pembelajaran mesin diinstal.

Pengaturan konfigurasi

Bagian ini mencantumkan komponen atau penyedia tambahan yang dapat menjadi sumber kesalahan saat Anda menjalankan skrip R atau Python.

Protokol jaringan apa yang tersedia?

Pembelajaran Mesin Services memerlukan protokol jaringan berikut untuk komunikasi internal di antara komponen ekstensibilitas, dan untuk komunikasi dengan klien R atau Python eksternal.

  • Saluran bernama
  • TCP/IP

Buka Pengelola Konfigurasi SQL Server untuk menentukan apakah protokol diinstal dan, jika diinstal, untuk menentukan apakah protokol diaktifkan.

Konfigurasi dan izin keamanan

Untuk akun pekerja:

  1. Di Panel Kontrol, buka Pengguna dan Grup, dan temukan grup yang digunakan untuk menjalankan pekerjaan skrip eksternal. Secara default, grupnya adalah SQLRUserGroup.
  2. Verifikasi bahwa grup ada dan berisi setidaknya satu akun pekerja.
  3. Di SQL Server Management Studio, pilih instans tempat pekerjaan R atau Python akan dijalankan, pilih Keamanan, lalu tentukan apakah ada masuk untuk SQLRUserGroup.
  4. Tinjau izin untuk grup pengguna.

Untuk akun pengguna individual:

  1. Tentukan apakah instans hanya mendukung autentikasi Mode Campuran, login SQL, atau autentikasi Windows. Pengaturan ini memengaruhi persyaratan kode R atau Python Anda.

  2. Untuk setiap pengguna yang perlu menjalankan kode R, tentukan tingkat izin yang diperlukan pada setiap database tempat objek akan ditulis dari R, data akan diakses, atau objek akan dibuat.

  3. Untuk mengaktifkan eksekusi skrip, buat peran atau tambahkan pengguna ke peran berikut, seperlunya:

    • Semua kecuali db_owner: Perlu JALANKAN SKRIP EKSTERNAL APA PUN.
    • db_datawriter: Untuk menulis hasil dari R atau Python.
    • db_ddladmin: Untuk membuat objek baru.
    • db_datareader: Untuk membaca data yang digunakan oleh kode R atau Python.
  4. Perhatikan apakah Anda mengubah akun startup default saat Anda menginstal SQL Server 2016.

  5. Jika pengguna perlu menginstal paket R baru atau menggunakan paket R yang diinstal oleh pengguna lain, Anda mungkin perlu mengaktifkan manajemen paket pada instans lalu menetapkan izin tambahan.

Folder apa yang tunduk pada penguncian oleh perangkat lunak antivirus?

Perangkat lunak antivirus dapat mengunci folder, yang mencegah penyiapan fitur pembelajaran mesin dan eksekusi skrip yang berhasil. Tentukan apakah ada folder di pohon SQL Server yang tunduk pada pemindaian virus.

Namun, ketika beberapa layanan atau fitur diinstal pada instans, mungkin sulit untuk menghitung semua folder yang mungkin digunakan oleh instans. Misalnya, ketika fitur baru ditambahkan, folder baru harus diidentifikasi dan dikecualikan.

Selain itu, beberapa fitur membuat folder baru secara dinamis saat runtime. Misalnya, tabel OLTP dalam memori, prosedur tersimpan, dan fungsi semuanya membuat direktori baru saat runtime. Nama folder ini sering berisi GUID dan tidak dapat diprediksi. SQL Server Trusted Launchpad membuat direktori kerja baru untuk pekerjaan skrip R dan Python.

Karena mungkin tidak mungkin untuk mengecualikan semua folder yang diperlukan oleh proses SQL Server dan fitur-fiturnya, kami sarankan Anda mengecualikan seluruh pohon direktori instans SQL Server.

Apakah firewall terbuka untuk SQL Server? Apakah instans mendukung koneksi jarak jauh?

  1. Untuk menentukan apakah SQL Server mendukung koneksi jarak jauh, lihat Mengonfigurasi koneksi server jarak jauh.

  2. Tentukan apakah aturan firewall telah dibuat untuk SQL Server. Untuk alasan keamanan, dalam penginstalan default, mungkin tidak mungkin bagi klien R atau Python jarak jauh untuk terhubung ke instans. Untuk informasi selengkapnya, lihat Pemecahan masalah menyambungkan ke SQL Server.

Baca juga

Memecahkan masalah pembelajaran mesin di SQL Server