Bekannte Probleme bei Python und R in SQL Server Machine Learning Services

Gilt für: SQL Server 2016 (13.x) und spätere Versionen

Wichtig

Die Unterstützung für Machine Learning Server (zuvor als R Server bezeichnet) endet am 1. Juli 2022. Weitere Informationen finden Sie unter Was geschieht mit Machine Learning Server?

In diesem Artikel werden bekannte Probleme und Einschränkungen der Python- und R-Komponenten beschrieben, die in SQL Server Machine Learning Services und SQL Server 2016 R Services bereitgestellt werden.

Einrichtungs- und Konfigurationsprobleme

Eine Beschreibung der Prozesse zur ersten Einrichtung und Konfiguration finden Sie unter Installieren von SQL Server-Machine Learning Services. Sie enthält Informationen über Upgrades, parallele Installationen und die Installation neuer R- oder Python-Komponenten.

Inkonsistente Ergebnisse in MKL-Berechnungen aufgrund fehlender Umgebungsvariablen

Anwendungsbereich: R_SERVER-Binärdateien 9.0, 9.1, 9.2 oder 9.3.

R_SERVER verwendet die Intel Math Kernel Library (MKL). Bei Berechnungen unter Einbeziehung der MKL können inkonsistente Ergebnisse auftreten, wenn in Ihrem System eine Umgebungsvariable fehlt.

Legen Sie die Umgebungsvariable 'MKL_CBWR'=AUTO fest, um die bedingte numerische Reproduzierbarkeit in R_SERVER sicherzustellen. Weitere Informationen finden Sie unter Introduction to Conditional Numerical Reproducibility (CNR) (Einführung in die bedingte numerische Reproduzierbarkeit).

Problemumgehung

  1. Klicken Sie in der Systemsteuerung auf System und Sicherheit>System>Erweiterte Systemeinstellungen>Umgebungsvariablen.

  2. Erstellen Sie eine neue Benutzer- oder Systemvariable.

    • Legen Sie die Variable auf MKL_CBWR fest.
    • Legen Sie den Wert auf AUTO fest.
  3. Starten Sie R_SERVER neu. Auf SQL Server können Sie den SQL Server-Launchpad-Dienst neu starten.

Hinweis

Wenn Sie SQL Server 2019 (15.x) unter Linux ausführen, bearbeiten oder erstellen Sie .bash_profile in Ihrem Benutzerstammverzeichnis, und fügen Sie die Zeile export MKL_CBWR="AUTO" hinzu. Führen Sie diese Datei aus, indem Sie source .bash_profile in der Bash-Eingabeaufforderung eingeben. Starten Sie R_SERVER neu, indem Sie an der R-Eingabeaufforderung Sys.getenv() eingeben.

R Script-Runtimefehler (SQL Server 2017: Regression in CU5–CU7)

Bei SQL Server 2017 (14.x) tritt in den kumulativen Updates 5 bis 7 eine Regression in der Datei rlauncher.config auf. Der Dateipfad des temporären Verzeichnisses enthält ein Leerzeichen. Diese Regression wurde in CU 8 korrigiert.

Beim Ausführen des R-Skripts werden folgende Fehlermeldungen angezeigt:

Fehler beim Kommunizieren mit der Runtime für das „R“-Skript. Überprüfen Sie die Anforderungen der R-Runtime.

STDERR-Meldung(en) vom externen Skript:

Schwerwiegender Fehler: „R_TempDir“ kann nicht erstellt werden.

Problemumgehung

Wenden Sie CU 8 an, sobald verfügbar. Alternativ können Sie rlauncher.config neu erstellen, indem Sie registerrext mit „uninstall/install“ an einer Eingabeaufforderung mit erhöhten Rechten ausführen.

<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>

Im folgenden Beispiel werden die Befehle veranschaulicht. Dabei ist die Standardinstanz „MSSQL14.MSSQLSERVER“ auf C:\Program Files\Microsoft SQL Server\ installiert:

"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

Machine Learning-Features von SQL Server können nicht auf einem Domänencontroller installiert werden

Wenn Sie versuchen, SQL Server 2016 (13.x) R Services oder SQL Server Machine Learning Services auf einem Domänencontroller zu installieren, treten beim Setup folgende Fehler auf:

Fehler während des Setupvorgangs für die Funktion

Gruppe mit Identität kann nicht gefunden werden

Komponentenfehlercode: 0x80131509

Der Fehler tritt auf, weil der Dienst auf einem Domänencontroller nicht die zum Ausführen von Machine Learning erforderlichen 20 lokalen Konten erstellen kann. Im Allgemeinen sollten Sie SQL Server nicht auf einem Domänencontroller installieren. Weitere Informationen finden Sie im Supportbulletin 2032911.

Installieren des aktuellsten Service Release, um die Kompatibilität mit Microsoft R Client sicherzustellen

Wenn Sie die neueste Version von Microsoft R Client installieren und anschließend verwenden, um R in einem Remotecomputekontext auf SQL Server auszuführen, erhalten Sie möglicherweise folgende Fehlermeldung:

Sie führen Version 9.x.x von Microsoft R Client auf Ihrem Computer aus. Diese ist nicht mit der Microsoft R Server-Version 8.x.x kompatibel. Laden Sie eine kompatible Version herunter und installieren Sie sie.

SQL Server 2016 (13.x) erfordert, dass die R-Bibliotheken auf dem Client exakt mit den R-Bibliotheken auf dem Server übereinstimmen. Die Einschränkung wurde für spätere Releases als R Server 9.0.1 aufgehoben. Wenn dieser Fehler auftritt, überprüfen Sie jedoch die Version der R-Bibliotheken, die von Ihrem Client und dem Server verwendet werden, und aktualisieren Sie ggf. den Client entsprechend der Serverversion.

Die Version von R, die mit SQL Server R Services installiert ist, wird aktualisiert, wenn ein Service Release für SQL Server installiert wird. Installieren Sie unbedingt alle Servicepacks, um sicherzustellen, dass Sie stets über die aktuellsten Versionen von R-Komponenten verfügen.

Möglicherweise wird beim Ausführen von R Server 8.0.3 auf SQL Server 2016 eine Fehlermeldung angezeigt: 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.-Kompatibilität mit Microsoft R Client 9.0.0 in SQL Server 2016 wurde in den folgenden Patches sichergestellt:

Um Probleme mit R-Paketen zu vermeiden, können Sie auch die Version der R-Bibliotheken aktualisieren, die auf dem Server installiert sind, indem Sie den Servicevertrag so ändern, dass die Modern Lifecycle Support-Richtlinie angewendet wird, wie im nächsten Abschnitt beschrieben. In diesem Fall wird die mit SQL Server installierte Version von R nach dem gleichen Zeitplan aktualisiert, der für Updates von Machine Learning Server (früher Microsoft R Server) verwendet wird.

Anwendungsbereich: SQL Server 2016 (13.x) R Services mit R Server Version 9.0.0 oder früher

Im SQL Server 2017 CU 3-Setup fehlen R-Komponenten

Eine begrenzte Anzahl von virtuellen Azure-Computern wurde ohne die R-Installationsdateien bereitgestellt, die in SQL Server eingeschlossen werden sollten. Das Problem betrifft virtuelle Computer, die vom 05.01.2018 bis 23.01.2018 bereitgestellt wurden. Dieses Problem könnte sich auch auf lokale Installationen auswirken, wenn Sie das CU 3-Update für SQL Server 2017 (14.x) im Zeitraum vom 05.01.2018 bis 23.01.2018 angewendet haben.

Es wurde ein Service Release bereitgestellt, das die richtige Version der R-Installationsdateien enthält.

Zum Installieren der Komponenten und Reparieren von SQL Server 2017 (14.x) CU 3 müssen Sie CU 3 deinstallieren und die aktualisierte Version neu installieren:

  1. Laden Sie die aktualisierte CU 3-Installationsdatei herunter, die die R-Installationsprogramme enthält.
  2. Deinstallieren Sie CU 3. Suchen Sie in der Systemsteuerung nach Update deinstallieren , und wählen Sie dann „Hotfix 3015 für SQL Server 2017 (KB4052987) (64-Bit)“ aus. Fahren Sie mit der Deinstallation fort.
  3. Installieren Sie das CU 3-Update neu, indem Sie auf das heruntergeladene Update für KB4052987 doppelklicken: SQLServer2017-KB4052987-x64.exe. Befolgen Sie die Installationsanweisungen.

Python-Komponenten können in Offlineinstallationen von SQL Server 2017 oder höher nicht installiert werden

Wenn Sie eine Vorabversion von SQL Server 2017 (14.x) auf einem Computer ohne Internetzugriff installieren, kann das Installationsprogramm möglicherweise nicht die Seite anzeigen, auf der Sie zur Eingabe des Speicherorts der heruntergeladenen Python-Komponenten aufgefordert werden. In diesem Fall können Sie das Machine Learning Services-Feature installieren, aber nicht die Python-Komponenten.

Dieses Problem wurde in der endgültigen Produktversion behoben. Außerdem gilt diese Einschränkung nicht für R-Komponenten.

Anwendungsbereich: SQL Server 2017 (14.x) mit Python

Warnung vor einer inkompatiblen Version beim Herstellen einer Verbindung mit einer älteren Version von SQL Server R Services von einem Client mithilfe von SQL Server 2017

Wenn Sie R-Code in einem SQL Server 2016 (13.x)-Computekontext ausführen, wird möglicherweise folgende Fehlermeldung angezeigt:

Sie führen Version 9.0.0 von Microsoft R Client auf Ihrem Computer aus. Diese ist nicht mit der Version 8.0.3 von Microsoft R Server kompatibel. Laden Sie eine kompatible Version herunter und installieren Sie sie.

Diese Meldung wird angezeigt, wenn eine der beiden folgenden Aussagen zutrifft:

  • Sie haben R Server (eigenständig) mithilfe des Setup-Assistenten für SQL Server 2017 (14.x) auf einem Clientcomputer installiert.
  • Sie haben Microsoft R Server mithilfe des separaten Windows-Installationsprogramms installiert.

Um sicherzustellen, dass Server und Client dieselbe Version verwenden, müssen Sie möglicherweise binding verwenden, was für Microsoft R Server 9.0 und spätere Versionen unterstützt wird, um die R-Komponenten in SQL Server 2016 (13.x)-Instanzen zu aktualisieren. Ob für Ihre Version von R Services Support für Upgrades verfügbar ist, erfahren Sie unter Aktualisieren von Machine Learning-Komponenten (R und Python) in SQL Server-Instanzen.

Anwendungsbereich: SQL Server 2016 (13.x) R Services mit R Server Version 9.0.0 oder früher

Setup für SQL Server 2016 Service Releases kann unter Umständen keine neueren R-Komponenten installieren

Wenn Sie ein kumulatives Update installieren oder ein Service Pack für SQL Server 2016 (13.x) auf einem Computer installieren, der nicht mit dem Internet verbunden ist, zeigt der Setup-Assistent möglicherweise nicht die Aufforderung an, mit der Sie die R-Komponenten mithilfe heruntergeladener CAB-Dateien aktualisieren können. Dieser Fehler tritt üblicherweise auf, wenn mehrere Komponenten zusammen mit der Datenbank-Engine installiert wurden.

Um dieses Problem zu umgehen, können Sie das Service Release installieren, indem Sie die Befehlszeile verwenden und das Argument MRCACHEDIRECTORY, das CU 1-Updates installiert, wie in diesem Beispiel gezeigt angeben:

C:\<path to installation media>\SQLServer2016-KB3164674-x64.exe /Action=Patch /IACCEPTROPENLICENSETERMS /MRCACHEDIRECTORY=<path to CU 1 CAB files>

Wie Sie aktuelle Installationsprogramme erhalten, erfahren Sie unter Installieren von Machine Learning-Komponenten ohne Internetzugang.

Anwendungsbereich: SQL Server 2016 (13.x) R Services mit R Server Version 9.0.0 oder früher

Launchpad-Dienste werden nicht gestartet, wenn die Version von der R-Version abweicht

Wenn Sie SQL Server R Services getrennt von der Datenbank-Engine installieren und die Buildversionen unterschiedlich sind, wird möglicherweise der folgende Fehler im Systemereignisprotokoll angezeigt:

Der Dienst SQL Server-Launchpad wurde aufgrund folgenden Fehlers nicht gestartet: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung.

Dieser Fehler tritt möglicherweise auf, wenn Sie die Datenbank-Engine mithilfe der endgültigen Produktversion installieren, einen Patch anwenden, um die Datenbank-Engine zu aktualisieren, und anschließend das R Services-Feature mithilfe der endgültigen Produktversion hinzufügen.

Um dieses Problem zu vermeiden, verwenden Sie ein Hilfsprogramm wie den Datei-Manager, um die Versionen von „Launchpad.exe“ mit der Version von SQL-Binärdateien wie sqldk.dll zu vergleichen. Alle Komponenten sollten dieselbe Versionsnummer aufweisen. Wenn Sie eine Komponente aktualisieren, müssen Sie dasselbe Upgrade auf alle anderen installierten Komponenten anwenden.

Suchen Sie im Binn-Ordner der Instanz nach Launchpad. In einer Standardinstallation von SQL Server 2016 (13.x) kann der Pfad beispielsweise C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn lauten.

Remotecomputekontexte werden in SQL Server-Instanzen, die auf virtuellen Azure-Computern ausgeführt werden, durch die Firewall blockiert

Falls Sie SQL Server auf einem virtuellen Azure-Computer installiert haben, können Sie Computekontexte, die die Verwendung des Arbeitsbereichs des virtuellen Computers erfordern, möglicherweise nicht verwenden. Der Grund ist, dass die Firewall auf virtuellen Azure-Computern standardmäßig eine Regel enthält, die den Netzwerkzugriff für lokale R-Benutzerkonten blockiert.

Um dieses Problem zu umgehen, öffnen Sie auf der Azure-VM Windows Firewall mit erweiterter Sicherheit, wählen Sie Ausgehende Regel aus, und deaktivieren Sie die folgende Regel: Netzwerkzugriff für lokale R-Benutzerkonten in der SQL Server-Instanz MSSQLSERVER blockieren. Sie können die Regel auch aktiviert lassen, aber ändern Sie dann die Sicherheitseigenschaft in Zulassen, falls sicher.

Implizite Authentifizierung in SQL Server 2016 Express Edition

Beim Ausführen von R-Aufträgen auf einer Data Science-Remotearbeitsstation mithilfe der integrierten Windows-Authentifizierung verwendet SQL Server die implizite Authentifizierung, um lokale ODBC-Aufrufe zu generieren, die das Skript möglicherweise benötigt. Im RTM-Build der SQL Server 2016 (13.x) Express Edition funktionierte dieses Feature jedoch nicht.

Um das Problem zu beheben, empfehlen wir die Aktualisierung auf ein neueres Service Release. Wenn ein Upgrade nicht möglich ist, können Sie als Problemumgehung eine SQL-Anmeldung verwenden, um R-Remoteaufträge auszuführen, die u. U. eingebettete ODBC-Aufrufe erfordern.

Anwendungsbereich: SQL Server 2016 (13.x) R Services Express Edition

Leistungsgrenzen, wenn von SQL Server verwendete Bibliotheken von anderen Tools aufgerufen werden

Es ist möglich, die Machine Learning-Bibliotheken aufzurufen, die von einer externen Anwendung wie RGui für SQL Server installiert werden. Dies ist unter Umständen die einfachste Möglichkeit, bestimmte Aufgaben wie das Installieren neuer Pakete oder Ausführen von Ad-hoc-Tests für sehr kurze Codebeispiele zu erledigen. Allerdings könnte die Leistung außerhalb von SQL Server eingeschränkt sein.

Selbst wenn Sie beispielsweise die Enterprise Edition von SQL Server verwenden, wird R im Singlethread-Modus ausgeführt, wenn Sie den R-Code mit externen Tools ausführen. Um die Leistungsvorteile in SQL Server zu nutzen, initiieren Sie eine SQL Server-Verbindung, und rufen Sie mit sp_execute_external_script die Runtime des externen Skripts auf.

Vermeiden Sie im Allgemeinen, die von SQL Server verwendeten Machine Learning-Bibliotheken von externen Tools aufzurufen. Wenn Sie R- oder Python-Code debuggen müssen, ist dies in der Regel außerhalb von SQL Server einfacher. Um dieselben Bibliotheken zu erhalten, die sich in SQL Server befinden, können Sie Microsoft R Client oder SQL Server 2017 Machine Learning Server (eigenständig) installieren.

SQL Server Data Tools unterstützt keine Berechtigungen, die für externe Skripts erforderlich sind

Wenn Sie Visual Studio oder SQL Server Data Tools zum Veröffentlichen eines Datenbankprojekts verwenden, erhalten Sie möglicherweise eine Fehlermeldung wie die folgende, wenn ein Prinzipal über Berechtigungen verfügt, die für die Ausführung externer Skripts spezifisch sind:

TSQL-Modell: Beim Reverse Engineering der Datenbank wurde ein Fehler erkannt. Die Berechtigung wurde nicht erkannt und nicht importiert.

Das DACPAC-Modell unterstützt derzeit keine von R Services oder Machine Learning Services verwendeten Berechtigungen wie GRANT ANY EXTERNAL SCRIPT oder EXECUTE ANY EXTERNAL SCRIPT. Dieses Problem wird in einer künftigen Version behoben werden.

Um dieses Problem zu umgehen, führen Sie die zusätzlichen GRANT-Anweisungen in einem Skript nach der Bereitstellung aus.

Externe Skriptausführung wird aufgrund von Ressourcenkontrolle-Standardwerten gedrosselt

In der Enterprise Edition können Sie Ressourcenpools verwenden, um externe Skriptprozesse zu verwalten. In einigen frühen Releasebuilds betrug der maximale Arbeitsspeicher, der den R-Prozessen zugeordnet werden konnte, 20 Prozent. Wenn der Server über 32 GB RAM-Speicher verfügte, konnten die ausführbaren R-Dateien (RTerm.exe und BxlServer.exe) in einer einzelnen Anforderung maximal 6,4 GB verwenden.

Wenn Ressourcenbeschränkungen auftreten, überprüfen Sie die aktuelle Standardeinstellung. Wenn der Standardwert von 20 Prozent nicht ausreicht, entnehmen Sie der Dokumentation für SQL Server, wie Sie diesen Wert ändern.

Anwendungsbereich: SQL Server 2016 (13.x) R Services, Enterprise Edition

Fehler beim Verwenden von sp_execute_external_script ohne libc++.so unter Linux

Auf einem bereinigten Linux-Computer, auf dem nicht libc++.so installiert ist, tritt beim Ausführen eines sp_execute_external_script (SPEES) mit Java oder einer externen Sprache ein Fehler auf, weil libc++.so von commonlauncher.so nicht geladen werden kann.

Beispiel:

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

Hierzu wird eine Fehlermeldung ähnlich der folgenden ausgegeben:

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.

Die mssql-launchpadd-Protokolle enthalten eine Fehlermeldung mit etwa folgendem Wortlaut:

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

Problemumgehung

Sie können eine der folgenden Problemumgehungen verwenden:

  1. Kopieren Sie libc++* aus /opt/mssql/lib in den Standardsystempfad /lib64.

  2. Fügen Sie /var/opt/mssql/mssql.conf die folgenden Einträge hinzu, um den Pfad verfügbar zu machen:

    [extensibility]
    readabledirectories = /opt/mssql
    

Anwendungsbereich: SQL Server 2019 (15.x) unter Linux

Installations- oder Upgradefehler auf FIPS-fähigen Servern

Wenn Sie SQL Server 2019 (15.x) mit dem Feature Machine Learning-Dienste und -Spracherweiterungen installieren oder ein Upgrade für die SQL Server-Instanz auf ein FIPS-fähigen Server (Federal Information Processing Standard) durchführen, wird der folgende Fehler ausgelöst:

An error occurred while installing extensibility feature with error message: AppContainer Creation Failed with error message NONE, state This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms. (Beim Installieren des Erweiterbarkeitsfeatures ist ein Fehler mit der folgenden Fehlermeldung aufgetreten: Erstellung von AppContainer ist mit der Fehlermeldung „NONE, state“ fehlgeschlagen. Diese Implementation ist nicht Teil der Windows Platform FIPS-überprüften kryptografischen Algorithmen.)

Problemumgehung

Deaktivieren Sie FIPS vor der Installation von SQL Server 2019 (15.x) mit dem Feature Machine Learning-Dienste und -Spracherweiterungen oder vor dem Upgrade der SQL Server-Instanz. Sobald die Installation oder das Upgrade abgeschlossen ist, können Sie FIPS wieder aktivieren.

Gilt für: SQL Server 2019 (15.x)

R-Bibliotheken mit bestimmten Algorithmen, Streaming oder Partitionierung

Problem

Die folgenden Einschränkungen gelten nur für SQL Server 2017 (14.x) mit dem Runtimeupgrade. Dieses Problem betrifft die Enterprise Edition.

  • Parallelität: Die RevoScaleR- und MicrosoftML-Algorithmusthreadparallelität ist für Szenarios auf maximal zwei Threads beschränkt.
  • Streaming und Partitionierung: Szenarien mit dem @r_rowsPerRead-Parameter, der an T-SQL sp_execute_external_script übergeben wird, werden nicht angewendet.
  • Streaming und Partitionierung: Die Datenquellen RevoScaleR und MicrosoftML (d. h. ODBC, XDF) unterstützen kein Lesen von Zeilen in Blöcken für Trainings- und Bewertungsszenarien. In diesen Szenarios werden grundsätzlich Daten in den Arbeitsspeicher zur Berechnung übertragen, und die Vorgänge sind speichergebunden.

Lösung

Die beste Lösung ist ein Upgrade auf SQL Server 2019 (15.x). Alternativ können Sie nach Abschluss der folgenden Aufgaben weiterhin SQL Server 2017 (14.x) mit Runtimeupgrades verwenden, die für die Verwendung von RegisterRext.exe /configure konfiguriert sind.

  1. Bearbeiten Sie die Registrierung, um einen Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150-Schlüssel zu erstellen und einen Wert SharedCode mit C:\Program Files\Microsoft SQL Server\150\Shared-Daten oder das freigegebene Verzeichnis der Instanz (wie konfiguriert) hinzuzufügen.
  2. Erstellen Sie einen C:\Program Files\Microsoft SQL Server\150\Shared and copy instapi140.dll-Ordner aus dem Ordner C:\Program Files\Microsoft SQL Server\140\Shared für den neu erstellten Ordner.
  3. Benennen Sie instapi140.dll in instapi150.dll im neuen Ordner C:\Program Files\Microsoft SQL Server\150\Shared um.

Wichtig

Wenn Sie die obigen Schritte ausführen, müssen Sie den hinzugefügten Schlüssel manuell entfernen, bevor Sie ein Upgrade auf eine höhere Version von SQL Server durchführen.

Leistungsprobleme des Prozesspoolings in ML Services (R und Python)

Dieser Abschnitt enthält bekannte Probleme und Problemumgehungen für die Verwendung von ML Services (R und Python) in SQL Server.

Kaltstartleistung von Prozesspooling in ML Services

Nach der Ausführung von sp_execute_external_script startet der Launchpaddienst die Satellitenprozesse, die die externen Runtimes wie R und Python starten. Damit sich die Startkosten amortisieren, wird ein Pool von Prozessen erstellt, die bei der nachfolgenden Ausführung von sp_execute_external_scriptverwendet werden können. Dieser Prozesspool ist spezifisch für diesen Benutzer, die Datenbank und die verwendete Sprache (R oder Python in ML Services).

Ausführen der ersten Abfrage

Die Satellitenprozesse benötigen eine Aufwärmphase, wenn sp_execute_external_script zum ersten Mal ausgeführt wird, oder nach einer Leerlaufphase (die Prozesse werden über einen Bereinigungsvorgang beendet, wenn sie eine Weile nicht verwendet werden). Der Kaltstart solcher gepoolten Prozesse kann (z. B. aufgrund von Ressourceneinschränkungen) langsam sein.

Problemumgehung

Wenn die Leistung des ersten Aufrufs wichtig ist, sollten die Abfragen aktiviert gehalten werden. Beispielsweise kann eine Hintergrundaufgabe ausgeführt werden, die eine einfache sp_execute_external_script Abfrage auslöst, bevor die Prozesse ablaufen. Um beispielsweise R-Abfragen aktiviert zu halten, können Sie die folgende Abfrage in regelmäßigen Abständen ausführen.

EXECUTE sp_execute_external_script @language = N'R', @script = N'';
GO

Hohe Anzahl gleichzeitiger Abfragen

Wenn die Anzahl der gleichzeitigen Ausführungen von sp_execute_external_script höher als die der aktiven R/Python-Prozesse im Pool ist, kann der Kaltstart des Hinzufügens zusätzlicher Prozesse zum Pol (z. B. aufgrund von Ressourceneinschränkungen) langsam sein.

Problemumgehung

Um das Skalierungsleistungsproblem zu beheben, können mehrere Anforderungen im Batch gesendet werden (z. B. über eine Loopbackverbindung zu SQL Server über ein Python- oder R-Skript oder das Umschreiben des Skripts, um mehrere Anforderungen zu verarbeiten). Darüber hinaus kann SQL PREDICT für Echtzeitszenarien verwendet werden.

Probleme mit der Ausführung des R-Skripts

Dieser Abschnitt enthält bekannte Probleme, die für die Ausführung von R auf SQL Server spezifisch sind, sowie einige Probleme im Zusammenhang mit den R-Bibliotheken und -Tools einschließlich RevoScaler, die von Microsoft veröffentlicht werden.

Weitere bekannte Probleme, die sich auf R-Lösungen auswirken können, finden Sie auf der Machine Learning Server-Website.

Zugriffsverweigerungswarnung beim Ausführen von R-Skripts unter SQL Server an einem nicht standardmäßigen Speicherort

Wenn die Instanz von SQL Server an einem nicht standardmäßigen Speicherort (z. B. außerhalb des Program Files-Ordners) installiert wurde, wird die Warnung ACCESS_DENIED ausgelöst, wenn Sie versuchen, Skripts auszuführen, mit denen ein Paket installiert wird. Beispiel:

In normalizePath(path.expand(path), winslash, mustWork) : path[2]="~ExternalLibraries/R/8/1": Der Zugriff wird verweigert

Der Grund hierfür ist, dass eine R-Funktion versucht, den Pfad zu lesen, und einen Fehler erzeugt, wenn die integrierte Benutzergruppe SQLRUserGroup keinen Lesezugriff hat. Die ausgelöste Warnung blockiert nicht die Ausführung des aktuellen R-Skripts, kann jedoch immer dann wiederholt auftreten, wenn der Benutzer ein anderes R-Skript ausführt.

Wenn Sie SQL Server am Standardspeicherort installiert haben, tritt dieser Fehler nicht auf, da alle Windows-Benutzer über Leseberechtigungen für den Ordner Program Files verfügen.

Dieses Problem wird in einem zukünftigen Service Release behandelt. Um dieses Problem zu umgehen, gewähren Sie der Gruppe SQLRUserGroup Lesezugriff für alle übergeordneten Ordner von ExternalLibraries.

Serialisierungsfehler zwischen alten und neuen Versionen von RevoScaleR

Wenn Sie ein Modell mit einem serialisierten Format an eine Remote-SQL Server-Instanz übergeben, erhalten Sie möglicherweise folgende Fehlermeldung:

Fehler in memDecompress(data, type = decompress) interner Fehler -3 in memDecompress(2).

Dieser Fehler wird ausgelöst, wenn Sie das Modell mit einer neueren Version der Serialisierungsfunktion rxSerializeModel gespeichert haben, aber die SQL Server-Instanz, auf der Sie das Modell deserialisieren, über eine ältere Version der RevoScaleR-APIs verfügt, ab SQL Server 2017 (14.x) CU 2 oder früher.

Um dieses Problem zu umgehen, können Sie die SQL Server 2017 (14.x)-Instanz auf CU 3 oder höher aktualisieren.

Der Fehler wird nicht angezeigt, wenn die API-Version identisch ist, oder wenn Sie ein Modell, das mit einer älteren Serialisierungsfunktion gespeichert ist, auf einen Server verschieben, auf dem eine neuere Version der Serialisierungs-API verwendet wird.

Mit anderen Worten: Verwenden Sie für Serialisierungs- und Deserialisierungsvorgänge die gleiche Version von RevoScaleR.

Die Echtzeitbewertung behandelt den learningRate-Parameter in Struktur- und Gesamtstrukturmodellen nicht ordnungsgemäß

Wenn Sie ein Modell mithilfe einer Entscheidungswald- oder Entscheidungsstrukturmethode erstellen und die Lernrate angeben, werden möglicherweise im Gegensatz zur Verwendung von rxPredict inkonsistente Ergebnisse angezeigt, wenn Sie sp_rxpredict oder die SQL-Funktion PREDICT verwenden.

Die Ursache ist ein Fehler in der API, die serialisierte Modelle verarbeitet, und auf den learningRate-Parameter beschränkt: z. B. in rxBTrees, oder

Dieses Problem wird in einem zukünftigen Service Release behandelt.

Einschränkungen der Prozessoraffinität für R-Aufträge

Im ersten Releasebuild von SQL Server 2016 (13.x) konnte die Prozessoraffinität nur für CPUs in der ersten k-Gruppe festgelegt werden. Wenn es sich bei dem Server um einen 2-Socket-Computer mit zwei k-Gruppen handelt, werden beispielsweise nur Prozessoren der ersten k-Gruppe für die R-Prozesse verwendet. Dieselbe Einschränkung gilt beim Konfigurieren der Ressourcenkontrolle für R-Skriptaufträge.

Dieses Problem wurde in SQL Server 2016 (13.x) Service Pack 1 behoben. Sie sollten auf das aktuelle Service Release aktualisieren.

Anwendungsbereich: SQL Server 2016 (13.x) R Services (RTM-Version)

Änderungen an Spaltentypen sind nicht möglich, wenn Daten in einem SQL Server-Computekontext gelesen werden

Wenn der Computekontext auf die SQL Server-Instanz festgelegt ist, können Sie das Argument colClasses (oder andere ähnliche Argumente) nicht verwenden, um den Datentyp von Spalten in Ihrem R-Code zu ändern.

Die folgende Anweisung würde beispielsweise zu einem Fehler führen, wenn die Spalte CRSDepTimeStr nicht bereits eine ganze Zahl ist:

data <- RxSqlServerData(
  sqlQuery = "SELECT CRSDepTimeStr, ArrDelay FROM AirlineDemoSmall",
  connectionString = connectionString,
  colClasses = c(CRSDepTimeStr = "integer"))

Um dieses Problem zu umgehen, können Sie die SQL-Abfrage so umschreiben, dass sie CAST oder CONVERT verwendet, um R die Daten mit dem richtigen Datentyp vorzulegen. Generell ist die Leistung besser, wenn Sie SQL verwenden, um mit Daten zu arbeiten, anstatt Daten im R-Code zu ändern.

Anwendungsbereich: SQL Server 2016 (13.x) R Services

Beschränkungen der Größe serialisierter Modelle

Wenn Sie ein Modell in einer SQL Server-Tabelle speichern, müssen Sie das Modell serialisieren und in einem Binärformat speichern. Theoretisch beträgt die maximale Größe eines Modells, das mit dieser Methode gespeichert werden kann, 2 GB. Dies ist die maximale Größe von varbinary-Spalten in SQL Server.

Wenn Sie größere Modelle verwenden müssen, sind die folgenden Problemumgehungen verfügbar:

  • Ergreifen Sie Maßnahmen, um die Größe des Modells zu verringern. Bei einigen Open-Source-R-Paketen sind zahlreiche Informationen im Modellobjekt enthalten, und viele dieser Informationen können für die Bereitstellung entfernt werden.

  • Entfernen Sie unnötige Spalten mit der Featureauswahl.

  • Bei einem Open-Source-Algorithmus sollten Sie eine ähnliche Implementierung mithilfe des entsprechenden Algorithmus in MicrosoftML oder RevoScaleR verwenden. Diese Pakete wurden für Bereitstellungsszenarien optimiert.

  • Stellen Sie nach der Rationalisierung des Modells und der Reduzierung der Größe mit den vorangehenden Schritten fest, ob die memCompress-Funktion in Basis-R verwendet werden kann, um die Größe des Modells zu verringern, bevor es an SQL Server übergeben wird. Diese Option ist am besten geeignet, wenn das Modell in der Nähe der 2 GB-Begrenzung liegt.

  • Bei größeren Modellen können Sie das FileTable-Feature von SQL Server verwenden, um die Modelle zu speichern, anstatt eine varbinary-Spalte zu verwenden.

    Um FileTables verwenden zu können, müssen Sie eine Firewallausnahme hinzufügen, da die in FileTables gespeicherten Daten in SQL Server vom Filestream-Dateisystemtreiber verwaltet werden und die standardmäßigen Firewallregeln den Zugriff auf Netzwerkdateien blockieren. Weitere Informationen finden Sie unter Aktivieren der erforderlichen Komponenten für FileTable.

    Nachdem Sie FileTable aktiviert haben, um das Modell zu schreiben, erhalten Sie mithilfe der FileTable-API einen Pfad von SQL, und dann schreiben Sie das Modell aus dem Code in diesen Speicherort. Wenn Sie das Modell lesen müssen, erhalten Sie den Pfad von SQL Server, und Sie können das Modell mit dem Pfad aus dem Skript abrufen. Weitere Informationen finden Sie unter Zugreifen auf FileTables mit Datei-E/A-APIs.

Vermeiden Sie das Löschen von Arbeitsbereichen, wenn Sie R-Code in einem SQL Server-Computekontext ausführen

Wenn Sie einen R-Befehl verwenden, um Objekte aus Ihrem Arbeitsbereich zu entfernen, während R-Code in einem SQL Server-Computekontext ausgeführt wird, oder wenn Sie den Arbeitsbereich im Rahmen eines R-Skripts löschen, das mit sp_execute_external_script aufgerufen wird, erhalten Sie möglicherweise die folgende Fehlermeldung: Arbeitsbereichsobjekt revoScriptConnection wurde nicht gefunden.

revoScriptConnection ist ein Objekt im R-Arbeitsbereich, das Informationen über eine R-Sitzung enthält, die aus SQL Serveraufgerufen wird. Wenn Ihr R-Code jedoch einen Befehl zum Löschen des Arbeitsbereichs enthält (wie z.B. rm(list=ls()))), werden alle Informationen über die Sitzung und andere Objekte im R-Arbeitsbereich ebenfalls gelöscht.

Um dieses Problem zu umgehen, sollten Sie willkürliches Löschen von Variablen und anderen Objekten während der Ausführung von R in SQL Server vermeiden. Das Löschen des Arbeitsbereichs ist bei der Arbeit auf der R-Konsole zwar üblich, kann aber zu unerwarteten Ergebnissen führen.

  • Um bestimmte Variablen zu löschen, verwenden Sie die Funktion remove von R: z. B. remove('name1', 'name2', ...).
  • Wenn mehrere zu löschende Variablen vorhanden sind, speichern Sie die Namen temporärer Variablen in einer Liste und führen eine regelmäßige automatische Speicherbereinigung durch.

Einschränkungen von Daten, die als Eingabe für ein R-Skript bereitgestellt werden können

Sie können die folgenden Typen von Abfrageergebnissen nicht in einem R-Skript verwenden:

  • Daten aus einer Transact-SQL -Abfrage, die auf „AlwaysEncrypted“-Spalten verweist.

  • Daten aus einer Transact-SQL -Abfrage, die auf maskierte Spalten verweist.

    Wenn Sie maskierte Daten in einem R-Skript verwenden müssen, ist eine mögliche Problemumgehung das Erstellen einer Kopie der Daten in einer temporären Tabelle und anschließende Verwenden dieser Daten.

Verwendung von Zeichenfolgen als Faktoren kann zu Leistungseinbußen führen

Die Verwendung von Zeichenfolgentyp-Variablen als Faktoren kann die Menge des für R-Vorgänge verwendeten Arbeitsspeichers erheblich erhöhen. Dies ist ein im Allgemeinen bekanntes Problem bei R, und es gibt viele Artikel zu diesem Thema. Informationen hierzu finden Sie unter Factors are not first-class citizens in R (Faktoren sind in R keine Bürger erster Klasse, von John Mount in R-bloggers), oder stringsAsFactors: An unauthorized biography (stringsAsFactors: Eine nicht autorisierte Biografie, von Roger Peng).

Obwohl das Problem nicht spezifisch für SQL Server ist, kann es sich erheblich auf die Leistung von R-Code auswirken, der in SQL Server ausgeführt wird. Zeichenfolgen werden in der Regel als varchar oder nvarchar gespeichert, und wenn eine Spalte mit Zeichenfolgendaten viele eindeutige Werte aufweist, kann der Prozess der internen Umwandlung in ganze Zahlen und zurück in Zeichenfolgen durch R sogar zu Speicherbelegungsfehlern führen.

Wenn Sie nicht unbedingt für andere Vorgänge einen Zeichenfolgen-Datentyp benötigen, ist die Zuordnung der Zeichenfolgenwerte zu einem numerischen Datentyp (Integer) als Teil der Datenaufbereitung aus Leistungs- und Skalierungsperspektive vorteilhaft.

Eine Erörterung dieses Problems und weitere Tipps finden Sie unter Leistung für R Services – Datenoptimierung.

Die Argumente varsToKeep und varsToDrop werden für SQL Server-Datenquellen nicht unterstützt

Wenn Sie die Funktion rxDataStep zum Schreiben von Ergebnissen in eine Tabelle verwenden, ist die Verwendung von varsToKeep und varsToDrop eine praktische Möglichkeit, um die Spalten anzugeben, die als Teil des Vorgangs eingeschlossen oder ausgeschlossen werden sollen. Diese Argumente werden für SQL Server-Datenquellen jedoch nicht unterstützt.

Eingeschränkte Unterstützung für SQL-Datentypen in sp_execute_external_script

Nicht alle in SQL unterstützten Datentypen können in R verwendet werden. Um dieses Problem zu umgehen, erwägen Sie, den nicht unterstützten Datentyp in einen unterstützten Datentypen umzuwandeln, bevor die Daten an sp_execute_external_script übergeben werden.

Weitere Informationen finden Sie unter R-Bibliotheken und Datentypen.

Mögliche Zeichenfolgenbeschädigung bei Verwendung von Unicode-Zeichenfolgen in varchar-Spalten

Die Übergabe von Unicode-Daten in varchar-Spalten aus SQL Server an R/Python kann zu einer Zeichenfolgenbeschädigung führen. Dies liegt daran, dass die Codierung für diese Unicode-Zeichenfolgen in SQL Server-Sortierungen möglicherweise nicht mit der in R/Python verwendeten standardmäßigen UTF-8-Codierung identisch ist.

Um Nicht-ASCII-Zeichenfolgendaten von SQL Server an R/Python zu senden, verwenden Sie die UTF-8-Codierung (in SQL Server 2019 (15.x) verfügbar), oder verwenden Sie den nvarchar-Typ für den gleichen Zweck.

Es kann nur ein Wert des Typs raw von sp_execute_external_script zurückgegeben werden

Wenn ein binärer Datentyp (der R-Datentyp raw) von R zurückgegeben wird, muss der Wert an den Ausgabedatenrahmen gesendet werden.

Mit anderen Datentypen als raw können Sie Parameterwerte zusammen mit den Ergebnissen der gespeicherten Prozedur zurückgeben, indem Sie das Schlüsselwort OUTPUT hinzufügen. Weitere Informationen finden Sie unter Parameter.

Wenn Sie mehrere Ausgaberesultsets verwenden möchten, die Werte des Typs raw enthalten, ist das mehrfache Aufrufen der gespeicherten Prozedur oder Zurücksenden der Resultsets an SQL Server mithilfe von ODBC als Problemumgehung möglich.

Genauigkeitsverlust

Weil Transact-SQL und R unterschiedliche Datentypen unterstützen, kann es bei der Konvertierung numerischer Datentypen zu einem Genauigkeitsverlust kommen.

Weitere Informationen zur impliziten Datentypkonvertierung finden Sie unter Datentypzuordnungen zwischen R und SQL Server.

Variablenbereichsfehler bei Verwendung des transformFunc-Parameters

Um Daten zu transformieren, während Sie ein Modell erstellen, können Sie ein transfodermFunc-Argument in einer Funktion wie rxLinmod oder rxLogit übergeben. Allerdings können Aufrufe geschachtelter Funktionen im SQL Server-Computekontext zu Fehlern bei der Bereichsdefinition führen, selbst wenn die Aufrufe im lokalen Computekontext ordnungsgemäß funktionieren.

Das Beispieldataset für die Analyse enthält keine Variablen.

Angenommen, Sie haben die beiden Funktionen f und g in Ihrer lokalen globalen Umgebung definiert, und g ruft f auf. Bei verteilten oder Remoteaufrufen unter Verwendung von g kann der Aufruf von g mit diesem Fehler erfolglos sein, da f nicht gefunden werden kann, selbst wenn Sie f und g an den Remoteaufruf übergeben haben.

Wenn dieses Problem auftritt, können Sie es umgehen, indem Sie die Definition von f innerhalb der Definition von gan einer Stelle einbetten, vor der g normalerweise faufrufen würde.

Beispiel:

f <- function(x) { 2*x * 3 }
g <- function(y) {
              a <- 10 * y
               f(a)
}

Um den Fehler zu vermeiden, schreiben Sie die Definition wie folgt um:

g <- function(y){
              f <- function(x) { 2*x +3}
              a <- 10 * y
              f(a)
}

Importieren und Bearbeiten von Daten mithilfe von RevoScaleR

Beim Lesen von varchar-Spalten aus einer Datenbank werden Leerzeichen abgeschnitten. Um dies zu verhindern, schließen Sie Zeichenfolgen in Zeichen ein, die keine Leerzeichen sind.

Wenn Sie Funktionen wie rxDataStep zum Erstellen von Datenbanktabellen mit varchar-Spalten nutzen, wird die Spaltenbreite basierend auf einer Stichprobe der Daten geschätzt. Wenn die Breite variieren kann, könnte es notwendig sein, alle Zeichenfolgen so aufzufüllen, dass ihre Länge gleich ist.

Das Verwenden einer Transformation zum Ändern des Datentyps einer Variablen wird nicht unterstützt, wenn wiederholte Aufrufe von rxImport oder rxTextToXdf zum Importieren und Anfügen von Zeilen verwendet werden, wobei mehrere Eingabedateien zu einer einzelnen XDF-Datei kombiniert werden.

Eingeschränkte Unterstützung für rxExec

In SQL Server 2016 (13.x) kann die rxExec-Funktion, die vom RevoScaleR-Paket bereitgestellt wird, nur im Singlethread-Modus verwendet werden.

Erhöhen der maximalen Parametergröße zur Unterstützung von rxGetVarInfo

Wenn Sie Datensätze mit einer sehr großen Anzahl von Variablen (z. B. über 40.000) verwenden, legen Sie das max-ppsize-Flag beim Starten von R fest, um Funktionen wie z. B. rxGetVarInfo zu verwenden. Das max-ppsize -Flag gibt die maximale Pointer Protection Stack-Größe an.

Wenn Sie die R-Konsole verwenden (z. B. „RGui.exe“ oder „RTerm.exe“), können Sie den Wert von max-ppsize auf 500.000 festlegen, indem Sie Folgendes eingeben:

R --max-ppsize=500000

Probleme mit der rxDTree-Funktion

Die rxDTree-Funktion unterstützt derzeit keine formelinternen Transformationen. Insbesondere das Verwenden der F()-Syntax zum Erstellen von Faktoren bei laufendem Betrieb wird nicht unterstützt. Numerische Daten werden jedoch automatisch klassifiziert.

Geordnete Faktoren werden in allen RevoScaleR-Analysefunktionen außer rxDTreegenauso wie Faktoren behandelt.

data.table als OutputDataSet in R

Die Verwendung von data.table als OutputDataSet in R wird im kumulativen Update 13 (CU 13) und früheren Updates von SQL Server 2017 (14.x) nicht unterstützt. Möglicherweise wird die folgende Meldung angezeigt:

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 als OutputDataSet in R wird im kumulativen Update 14 (CU 14) und späteren Updates von SQL Server 2017 (14.x) unterstützt.

Ausführen eines langen Skripts schlägt fehl, wenn eine Bibliothek installiert wird

Wenn das DBO parallel zu einer zeitintensiven Sitzung eines externen Skripts versucht, eine Bibliothek in einer anderen Datenbank zu installieren, kann das Skript beendet werden.

Beispielsweise wird dieses externe Skript für die master-Datenbanken ausgeführt:

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

Währenddessen installiert das DBO parallel eine Bibliothek in 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

Das vorherige für die master-Datenbank ausgeführte zeitintensive externe Skript wird mit der folgenden Fehlermeldung beendet:

Unerwarteter „R“-Skriptfehler beim Ausführen von „sp_execute_external_script“ mit HRESULT 0x800704d4.

Problemumgehung

Führen Sie die Bibliotheksinstallation nicht parallel zur zeitintensiven Abfrage aus. Sie können die zeitintensive Abfrage auch ausführen, sobald die Installation beendet ist.

Anwendungsbereich: Nur SQL Server 2019 (15.x) unter Linux und Big Data-Cluster.

SQL Server reagiert nicht mehr, wenn R-Skripts mit paralleler Ausführung ausgeführt werden.

SQL Server 2019 (15.x) enthält eine Regression, die sich auf R-Skripts mit paralleler Ausführung auswirkt. Beispiele sind die Verwendung von rxExec mit RxLocalPar Computekontext und -skripts, die das parallele Paket verwenden. Dieses Problem wird durch Fehler verursacht, auf die das parallele Paket beim Schreiben auf das NULL-Gerät stößt, während es in SQL Server ausgeführt wird.

Anwendungsbereich: SQL Server 2019 (15.x)

Genauigkeitsverlust bei den Datentypen „money/numeric/decimal/bigint“

Die Ausführung eines R-Skripts mit sp_execute_external_script lässt die Datentypen „money“, „numeric“, „decimal“ und „bigint“ als Eingabedaten zu. Da diese jedoch in den numerischen Typ von R konvertiert werden, verlieren sehr hohe Werte oder Werte mit Dezimalstellen an Genauigkeit.

  • money: Manchmal könnten Cent-Werte ungenau sein, und es würde folgende Warnung ausgegeben: Warning: unable to precisely represent cents values (Warnung: Cent-Werte können nicht genau dargestellt werden).
  • numeric/decimal:sp_execute_external_script mit einem R-Skript unterstützt nicht den vollständigen Bereich der Datentypen und würde die letzten paar Dezimalstellen ändern, insbesondere Bruchzahlen.
  • bigint: R unterstützt nur ganze Zahlen bis zu 53 Bit. Höhere Werte verlieren an Genauigkeit.

Probleme mit der rxExecBy-Funktion: Die rxExecBy-Funktion kann das installierte Paket nicht finden.

Wenn die rxExecBy-Funktion aufgerufen wird, wird ein neuer R-Laufzeitprozess gestartet. Dieser neue Prozess verfügt nicht über aktualisierte Bibliothekspfade. Daher werden Pakete, die an anderen Speicherorten als dem Standardbibliothekspfad installiert sind, während der Ausführung nicht gefunden.

Problemumgehung

Der Pfad zu R-Paketen muss explizit aktualisiert werden. Angenommen, die Pakete sind im Pfad für externe Bibliotheken installiert, dann könnte das folgende R-Skript verwendet werden, um den Bibliothekspfad zu aktualisieren: .libPaths(c(Sys.getenv("MRS_EXTLIB_USER_PATH"), Sys.getenv("MRS_EXTLIB_SHARED_PATH"), .libPaths()))

Probleme mit der Ausführung des Python-Skripts

Dieser Abschnitt enthält bekannte Probleme, die für die Ausführung von Python auf SQL Server spezifisch sind, sowie Probleme im Zusammenhang mit den von Microsoft veröffentlichten Python-Paketen, einschließlich revoscalepy und microsoftml.

Fehler beim Aufruf des vortrainierten Modells, wenn der Pfad zum Modell zu lang ist

Wenn Sie die vorab trainierten Modelle in einem frühen Release von SQL Server 2017 (14.x) installiert haben, ist der gesamte Pfad zur Datei des trainierten Modells möglicherweise so lang, dass Python ihn nicht lesen kann. Diese Einschränkung wird in einem späteren Service Release korrigiert.

Mehrere Problemumgehungen sind möglich:

  • Wenn Sie die vorab trainierten Modelle installieren, wählen Sie einen benutzerdefinierten Speicherort aus.
  • Installieren Sie die SQL Server-Instanz nach Möglichkeit unter einem kürzeren, benutzerdefinierten Installationspfad, z. B. C:\SQL\MSSQL14.MSSQLSERVER.
  • Verwenden Sie das Windows-Hilfsprogramm Fsutil, um einen festen Link zu erstellen, der die Modelldatei einem kürzeren Pfad zuordnet.
  • Aktualisieren Sie auf das neueste Service Release.

Fehler beim Speichern des serialisierten Modells in SQL Server

Wenn Sie ein Modell an eine Remote-SQL Server-Instanz übergeben und versuchen, das binäre Modell mit der rx_unserialize-Funktion in revoscalepy zu lesen, erhalten Sie möglicherweise folgende Fehlermeldung:

NameError: Name „rx_unserialize_model“ ist nicht definiert

Dieser Fehler wird ausgelöst, wenn Sie das Modell mit einer neueren Version der Serialisierungsfunktion gespeichert haben, aber die SQL Server-Instanz, auf der Sie das Modell deserialisieren, die Serialisierungs-API nicht erkennt.

Um dieses Problem zu lösen, können Sie die SQL Server 2017 (14.x)-Instanz auf CU 3 oder höher aktualisieren.

Fehler beim Initialisieren einer varbinary-Variablen verursacht einen Fehler in BxlServer

Wenn Sie Python-Code in SQL Server mit sp_execute_external_script ausführen und der Code Ausgabevariablen vom Typ varbinary(max), varchar(max) oder ähnliche Typen aufweist, muss die Variable als Teil des Skripts initialisiert oder festgelegt werden. Andernfalls löst die Datenaustauschkomponente BxlServer einen Fehler aus und funktioniert nicht mehr.

Diese Einschränkung wird in einem zukünftigen Service Release korrigiert. Um dieses Problem zu umgehen, stellen Sie sicher, dass die Variable innerhalb des Python-Skripts initialisiert wird. Jeder gültige Wert kann verwendet werden, wie in den folgenden Beispielen:

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

Telemetriedatenwarnung bei erfolgreicher Ausführung von Python-Code

Ab SQL Server 2017 (14.x) CU 2 wird möglicherweise die folgende Meldung angezeigt, auch wenn Python-Code anderweitig erfolgreich ausgeführt wird:

STDERR-Meldung(en) aus dem externen Skript:~PYTHON_SERVICES\lib\site-packages\revoscalepy\utils\RxTelemetryLoggerSyntaxWarning: telemetry_state wird vor der globalen Deklaration verwendet

Dieses Problem wurde im kumulativen Update 3 (CU 3) von SQL Server 2017 (14.x) behoben.

Numerische, dezimale und money-Datentypen werden nicht unterstützt

Seit dem kumulativen Update 12 (CU 12) von SQL Server 2017 (14.x) werden numerische, dezimale und money-Datentypen bei Verwendung von Python mit sp_execute_external_script in WITH RESULT SETS nicht unterstützt. Möglicherweise werden folgende Meldungen angezeigt:

[Code: 39004, SQL-Status: S1000] Unerwarteter „Python“-Skriptfehler beim Ausführen von „sp_execute_external_script“ mit HRESULT 0x80004004.

[Code: 39019, SQL-Status: S1000] Ein externer Skriptfehler ist aufgetreten:

SqlSatelliteCall-Fehler: Nicht unterstützter Typ im Ausgabeschema. Unterstützte Typen: „bit“, „smallint“, „int“, „datetime“, „smallmoney“, „real“ und „float“. „char“ und „varchar“ werden teilweise unterstützt.

Dieses Problem wurde im kumulativen Update 14 (CU 14) von SQL Server 2017 (14.x) behoben.

Fehler „ungültiger Interpreter“ beim Installieren von Python-Paketen mit PIP unter Linux

Wenn Sie unter SQL Server 2019 (15.x) versuchen, pip zu verwenden. Beispiel:

/opt/mssql/mlservices/runtime/python/bin/pip -h

Sie erhalten dann diese Fehlermeldung:

bash: /opt/mssql/mlservices/runtime/python/bin/pip: /opt/microsoft/mlserver/9.4.7/bin/python/python: ungültiger Interpreter: No such file or directory (chroot: Fehler beim Ausführen des Befehls „/bin/bash“: Datei oder Verzeichnis nicht vorhanden),

Problemumgehung

Installieren Sie PIP von der Python Package Authority (PyPA):

wget 'https://bootstrap.pypa.io/get-pip.py'
/opt/mssql/mlservices/bin/python/python ./get-pip.py

Empfehlung

Siehe Installieren von Python-Paketen mit sqlmlutils.

Anwendungsbereich: SQL Server 2019 (15.x) unter Linux

Python-Pakete können nicht mithilfe von pip installiert werden, nachdem SQL Server 2019 unter Windows installiert wurde

Nach der Installation von SQL Server 2019 (15.x) unter Windows tritt beim Versuch, ein Python-Paket über pip von einer DOS-Befehlszeile zu installieren, ein Fehler auf. Beispiel:

pip install quantfolio

Dies gibt folgenden Fehler zurück:

PIP ist für Standorte konfiguriert, die TLS/SSL erfordern, aber das SSL-Modul in Python ist nicht verfügbar.

Dies ist ein spezifisches Problem des Anaconda-Pakets. Es wird in einem zukünftigen Service Release korrigiert.

Problemumgehung

Kopieren Sie die folgenden Dateien:

  • libssl-1_1-x64.dll
  • libcrypto-1_1-x64.dll

aus dem Ordner
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin

in den Ordner
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs

Öffnen Sie dann eine neue DOS-Befehlsshell-Eingabeaufforderung.

Anwendungsbereich: SQL Server 2019 (15.x) unter Windows

Fehler beim Verwenden von sp_execute_external_script ohne libc++abo.so unter Linux

Auf einem bereinigten Linux-Computer, auf dem libc++abi.so nicht installiert ist, tritt beim Ausführen einer sp_execute_external_script-Abfrage (SPEES) ein Fehler mit der Meldung „Datei oder Verzeichnis nicht vorhanden“ auf.

Beispiel:

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

Problemumgehung

Führen Sie den folgenden Befehl aus:

sudo cp /opt/mssql/lib/libc++abi.so.1 /opt/mssql-extensibility/lib/

Anwendungsbereich: SQL Server 2019 (15.x) unter Linux

Allgemeiner Fehler bei der Ausführung von sp_execute_external_script auf Ubuntu 20.04 mit SQL Server 2022 CU6 unter Linux

Die Installation von SQL Server 2022 CU6 für Linux auf Ubuntu 20.04 kann zu folgendem Fehler führen, wenn sp_execute_external_script für R- und Python-Skripts ausgeführt wird:

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]

Problemumgehung

Führen Sie den folgenden Befehl aus, um die Paketabhängigkeit libssl-dev zu installieren, die es SQL Server ermöglicht, die vom System bereitgestellten freigegebenen Bibliotheken libssl und libcrypto aufzulösen.

sudo apt-get update
sudo apt-get install libssl-dev

Fehler beim Erstellen von Firewallregeln bei modprobe der Ausführung von mssql-launchpadd unter Linux

Beim Anzeigen der Protokolle von mssql-launchpadd unter Verwendung von sudo journalctl -a -u mssql-launchpadd wird möglicherweise ein Fehler bei der Erstellung von Firewallregeln angezeigt, der mit der folgenden Ausgabe vergleichbar ist.

-- 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

Problemumgehung

Führen Sie die folgenden Befehle aus, um modprobe zu konfigurieren, und starten Sie den SQL Server-Launchpaddienst neu:

sudo modprobe ip6_tables
sudo systemctl restart mssql-launchpadd

Anwendungsbereich: SQL Server 2019 (15.x) und höher unter Linux

tensorflow-Paket kann nicht mithilfe von sqlmlutils installiert werden

Das sqlmlutils-Paket wird zum Installieren von Python-Paketen in SQL Server 2019 (15.x) verwendet. Sie müssen das Microsoft Visual C++ 2015–2019 Redistributable (x64) herunterladen, installieren und aktualisieren. Allerdings kann das tensorflow-Paket nicht mit sqlmlutils installiert werden. Das tensorflow-Paket hängt von einer numpy-Version ab, die neuer als die in SQL Server installierte Version ist. Bei numpy handelt es sich jedoch um ein vorinstalliertes Systempaket, das sqlmlutils nicht aktualisieren kann, wenn versucht wird, tensorflow zu installieren.

Problemumgehung

Führen Sie den folgenden Befehl mithilfe einer Eingabeaufforderung im Administratormodus aus, und ersetzen Sie „MSSQLSERVER“ dabei durch den Namen Ihrer SQL-Instanz:

"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe" -m pip install --upgrade tensorflow

Wenn ein „TLS/SSL-Fehler“ auftritt, finden Sie weitere Informationen unter 7. Python-Pakete können nicht mithilfe von PIP installiert werden weiter oben in diesem Artikel.

Anwendungsbereich: SQL Server 2019 (15.x) unter Windows

Revolution R Enterprise und Microsoft R Open

In diesem Abschnitt werden Probleme aufgeführt, die speziell von Revolution Analytics bereitgestellte Konnektivitäts-, Entwicklungs- und Leistungstools für R betreffen. Diese Tools wurden in früheren Vorabversionen von SQL Server bereitgestellt.

Generell sollten Sie diese Vorabversionen deinstallieren und die neueste Version von SQL Server oder Microsoft R Server installieren.

Revolution R Enterprise wird nicht unterstützt

Das parallele Installieren von Revolution R Enterprise mit einer beliebigen Version von R Services (In-Database) wird nicht unterstützt.

Wenn Sie eine Lizenz für Revolution R Enterprise besitzen, müssen Sie diese auf einem Computer verwenden, der sowohl von der SQL Server-Instanz als auch allen Arbeitsstationen getrennt ist, über die Sie eine Verbindung mit der SQL Server-Instanz herstellen möchten.

Einige Vorabversionen von R Services (In-Database) enthalten eine von Revolution Analytics erstellte R-Entwicklungsumgebung für Windows. Dieses Tool wird nicht mehr zur Verfügung gestellt und nicht unterstützt.

Zur Kompatibilität mit R Services (In-Database) sollten Sie stattdessen Microsoft R Client installieren. R Tools für Visual Studio und Visual Studio Code unterstützen auch Microsoft R-Lösungen.

Kompatibilitätsprobleme mit SQLite-ODBC-Treiber und RevoScaleR

Revision 0.92 des SQLite-ODBC-Treibers ist mit RevoScaleR nicht kompatibel. Die Revisionen von 0.88-0.91 sowie 0.93 und höher sind bekanntermaßen kompatibel.

Nächste Schritte