Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Belangrijk
De ondersteuning voor Machine Learning Server (voorheen bekend als R Server) is beëindigd op 1 juli 2022. Zie Wat gebeurt er met Machine Learning Server voor meer informatie?
In dit artikel worden bekende problemen of beperkingen beschreven met de Python- en R-onderdelen die worden geleverd in SQL Server Machine Learning Services en SQL Server 2016 R Services.
Problemen met installatie en configuratie
Zie SQL Server Machine Learning Services installeren voor een beschrijving van processen met betrekking tot de eerste installatie en configuratie. Het bevat informatie over upgrades, installatie naast elkaar en installatie van nieuwe R- of Python-onderdelen.
Inconsistente resultaten in MKL-berekeningen vanwege ontbrekende omgevingsvariabele
Van toepassing op: R_SERVER binaire bestanden 9.0, 9.1, 9.2 of 9.3.
R_SERVER maakt gebruik van de Intel Math Kernel Library (MKL). Voor berekeningen met MKL kunnen inconsistente resultaten optreden als er een omgevingsvariabele ontbreekt in uw systeem.
Stel de omgevingsvariabele 'MKL_CBWR'=AUTO in om voorwaardelijke numerieke reproduceerbaarheid in R_SERVER te garanderen. Zie Inleiding tot voorwaardelijke numerieke reproduceerbaarheid (CNR) voor meer informatie.
Tijdelijke maatregel
In het Configuratiescherm selecteert u Systeem en Beveiliging>Systeem>Geavanceerde systeeminstellingen>Omgevingsvariabelen.
Maak een nieuwe gebruiker of systeemvariabele.
- Stel variabele in op
MKL_CBWR. - Stel de waarde in op
AUTO.
- Stel variabele in op
Start R_SERVER opnieuw. Op SQL Server kunt u de SQL Server Launchpad-service opnieuw starten.
Opmerking
Als u SQL Server 2019 (15.x) uitvoert op Linux, bewerk of maak .bash_profile in de basismap van uw gebruiker en voeg de regel export MKL_CBWR="AUTO" toe. Voer dit bestand uit door te typen source .bash_profile bij een bash-opdrachtprompt. Start R_SERVER opnieuw door te typen Sys.getenv() bij de R-opdrachtprompt.
R-script runtimefout (SQL Server 2017 CU 5 - CU 7 regressie)
Voor SQL Server 2017 (14.x), in cumulatieve updates 5 tot en met 7, is er een regressie in het rlauncher.config bestand waarin het pad naar het tijdelijke mapbestand een spatie bevat. Deze regressie wordt gecorrigeerd in CU 8.
De fout die u ziet wanneer u R-script uitvoert, bevat de volgende berichten:
Kan niet communiceren met de runtime voor R-script. Controleer de vereisten van R-runtime.
STDERR-bericht(en) van extern script:
Onherstelbare fout: kan geen 'R_TempDir' maken
Tijdelijke maatregel
Pas CU 8 toe wanneer deze beschikbaar is. U kunt ook rlauncher.config opnieuw creëren door registerrext uit te voeren met uninstall/install in een opdrachtprompt met verhoogde rechten.
<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>
In het volgende voorbeeld ziet u de opdrachten met het standaardexemplaar "MSSQL14.MSSQLSERVER" geïnstalleerd in 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
Kan sql Server-functies voor machine learning niet installeren op een domeincontroller
Als u SQL Server 2016 (13.x) R Services of SQL Server Machine Learning Services op een domeincontroller probeert te installeren, mislukt de installatie met de volgende fouten:
Er is een fout opgetreden tijdens het installatieproces van de functie
Kan groep met identiteit niet vinden
Foutcode van onderdeel: 0x80131509
De fout treedt op omdat de service op een domeincontroller niet de 20 lokale accounts kan maken die nodig zijn om machine learning uit te voeren. Over het algemeen raden we u niet aan SQL Server te installeren op een domeincontroller. Zie het ondersteuningsbulletin 2032911 voor meer informatie.
Installeer de nieuwste servicerelease om compatibiliteit met Microsoft R Client te garanderen
Als u de nieuwste versie van Microsoft R Client installeert en deze gebruikt om R op SQL Server uit te voeren in een externe rekencontext, krijgt u mogelijk een foutbericht als volgt:
U gebruikt versie 9.x.x van Microsoft R Client op uw computer, wat niet compatibel is met Microsoft R Server versie 8.x.x. Download en installeer een compatibele versie.
SQL Server 2016 (13.x) vereist dat de R-bibliotheken op de client exact overeenkomen met de R-bibliotheken op de server. De beperking is verwijderd voor releases later dan R Server 9.0.1. Als deze fout echter optreedt, controleert u de versie van de R-bibliotheken die door uw client en de server worden gebruikt en werkt u de client zo nodig bij zodat deze overeenkomt met de serverversie.
De versie van R die is geïnstalleerd met SQL Server R Services wordt bijgewerkt wanneer er een SQL Server-servicerelease wordt geïnstalleerd. Om ervoor te zorgen dat u altijd de meest up-to-date versies van R-onderdelen hebt, moet u alle service packs installeren.
Er wordt mogelijk een foutbericht weergegeven bij het uitvoeren van R Server 8.0.3 op 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. Compatibiliteit met Microsoft R Client 9.0.0 in SQL Server 2016 is gegarandeerd in de volgende patches:
Als u problemen met R-pakketten wilt voorkomen, kunt u ook de versie van de R-bibliotheken bijwerken die op de server zijn geïnstalleerd, door uw serviceovereenkomst te wijzigen zodat het moderne levenscyclusondersteuningsbeleid wordt gebruikt, zoals beschreven in de volgende sectie. Wanneer u dit doet, wordt de versie van R die is geïnstalleerd met SQL Server bijgewerkt volgens hetzelfde schema dat wordt gebruikt voor updates van Machine Learning Server (voorheen Microsoft R Server).
Van toepassing op: SQL Server 2016 (13.x) R Services, met R Server versie 9.0.0 of eerder
R-onderdelen ontbreken in de installatie van SQL Server 2017 CU 3
Een beperkt aantal virtuele Azure-machines is ingericht zonder de R-installatiebestanden die moeten worden opgenomen in SQL Server. Het probleem is van toepassing op virtuele machines die zijn ingericht in de periode van 2018-01-05 tot 2018-01-23. Dit probleem kan ook van invloed zijn op on-premises installaties, als u de CU 3-update voor SQL Server 2017 (14.x) hebt toegepast tijdens de periode van 2018-01-05 tot 2018-01-23.
Er is een servicerelease opgegeven die de juiste versie van de R-installatiebestanden bevat.
Als u de onderdelen wilt installeren en SQL Server 2017 (14.x) CU 3 wilt herstellen, moet u CU 3 verwijderen en de bijgewerkte versie opnieuw installeren:
- Download het bijgewerkte CU 3-installatiebestand, dat de R-installatieprogramma's bevat.
- Verwijder CU 3. Zoek in het Configuratiescherm naar Een update verwijderen en selecteer vervolgens Hotfix 3015 voor SQL Server 2017 (KB4052987) (64-bits). Ga verder met de stappen voor het verwijderen.
- Installeer de CU 3-update opnieuw door te dubbelklikken op de update voor KB4052987 die u hebt gedownload:
SQLServer2017-KB4052987-x64.exe. Volg de installatie-instructies.
Kan Python-onderdelen niet installeren in offline-installaties van SQL Server 2017 of hoger
Als u een voorlopige versie van SQL Server 2017 (14.x) op een computer installeert zonder internettoegang, kan het installatieprogramma mogelijk niet de pagina weergeven waarin wordt gevraagd om de locatie van de gedownloade Python-onderdelen. In een dergelijk geval kunt u de functie Machine Learning Services installeren, maar niet de Python-onderdelen.
Dit probleem is opgelost in de releaseversie. Deze beperking geldt ook niet voor R-onderdelen.
Van toepassing op: SQL Server 2017 (14.x) met Python
Waarschuwen voor incompatibele versie wanneer u verbinding maakt met een oudere versie van SQL Server R Services vanaf een client met behulp van SQL Server 2017
Wanneer u R-code uitvoert in een REKENcontext van SQL Server 2016 (13.x), ziet u mogelijk de volgende fout:
U gebruikt versie 9.0.0 van Microsoft R Client op uw computer. Dit is niet compatibel met Microsoft R Server versie 8.0.3. Download en installeer een compatibele versie.
Dit bericht wordt weergegeven als een van de volgende twee instructies waar is:
- U hebt R Server (zelfstandig) op een clientcomputer geïnstalleerd met behulp van de installatiewizard voor SQL Server 2017 (14.x).
- U hebt Microsoft R Server geïnstalleerd met behulp van het afzonderlijke Windows Installer.
Om ervoor te zorgen dat de server en client dezelfde versie gebruiken, moet u mogelijk binding gebruiken, ondersteund voor Microsoft R Server 9.0 en hoger, om de R-onderdelen in SQL Server 2016-exemplaren (13.x) te upgraden. Zie Een exemplaar van R Services upgraden met behulp van SqlBindR.exeom te bepalen of ondersteuning voor upgrades beschikbaar is voor uw versie van R Services.
Van toepassing op: SQL Server 2016 (13.x) R Services, met R Server versie 9.0.0 of eerder
Installatie voor SQL Server 2016-servicereleases kan mislukken bij het installeren van nieuwere versies van R-onderdelen
Wanneer u een cumulatieve update installeert of een servicepack installeert voor SQL Server 2016 (13.x) op een computer die niet is verbonden met internet, kan de installatiewizard mogelijk niet de prompt weergeven waarmee u de R-onderdelen kunt bijwerken met behulp van gedownloade CAB-bestanden. Deze fout treedt meestal op wanneer meerdere onderdelen samen met de database-engine zijn geïnstalleerd.
Als tijdelijke oplossing kunt u de servicerelease installeren met behulp van de opdrachtregel en het MRCACHEDIRECTORY argument opgeven, zoals wordt weergegeven in dit voorbeeld, waarmee CU 1-updates worden geïnstalleerd:
C:\<path to installation media>\SQLServer2016-KB3164674-x64.exe /Action=Patch /IACCEPTROPENLICENSETERMS /MRCACHEDIRECTORY=<path to CU 1 CAB files>
Zie Machine Learning-onderdelen installeren zonder internettoegang om de nieuwste installatieprogramma's te downloaden.
Van toepassing op: SQL Server 2016 (13.x) R Services, met R Server versie 9.0.0 of eerder
Launchpad-services kunnen niet worden gestart als de versie verschilt van de R-versie
Als u SQL Server R Services afzonderlijk van de database-engine installeert en de buildversies verschillen, ziet u mogelijk de volgende fout in het systeemlogboek:
De SQL Server Launchpad-service kan niet worden gestart vanwege de volgende fout: de service heeft niet tijdig op de start- of controleaanvraag gereageerd.
Deze fout kan bijvoorbeeld optreden als u de database-engine installeert met behulp van de releaseversie, een patch toepast om de database-engine te upgraden en vervolgens de R Services-functie toe te voegen met behulp van de releaseversie.
Als u dit probleem wilt voorkomen, gebruikt u een hulpprogramma zoals File Manager om de versies van Launchpad.exe te vergelijken met de versie van binaire SQL-bestanden, zoals sqldk.dll. Alle onderdelen moeten hetzelfde versienummer hebben. Als u één onderdeel bijwerken, moet u dezelfde upgrade toepassen op alle andere geïnstalleerde onderdelen.
Zoek naar Launchpad in de Binn map van de instantie. In een standaardinstallatie van SQL Server 2016 (13.x) kan het pad bijvoorbeeld zijn C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn.
Externe rekencontexten worden geblokkeerd door een firewall in SQL Server-exemplaren die worden uitgevoerd op virtuele Azure-machines
Als u SQL Server op een virtuele Azure-machine hebt geïnstalleerd, kunt u mogelijk geen rekencontexten gebruiken waarvoor het gebruik van de werkruimte van de virtuele machine is vereist. De reden hiervoor is dat de firewall op virtuele Azure-machines standaard een regel bevat waarmee netwerktoegang voor lokale R-gebruikersaccounts wordt geblokkeerd.
Als tijdelijke oplossing opent u Windows Firewall met geavanceerde beveiliging op de Virtuele Azure-machine, selecteert u uitgaande regels en schakelt u de volgende regel uit: Netwerktoegang blokkeren voor lokale R-gebruikersaccounts in SQL Server-exemplaar MSSQLSERVER. U kunt de regel ook ingeschakeld laten, maar de beveiligingseigenschap wijzigen in Toestaan indien beveiligd.
Impliciete verificatie in SQL Server 2016 Express-editie
Wanneer u R-taken uitvoert vanaf een extern data science-werkstation met geïntegreerde Windows-verificatie, gebruikt SQL Server impliciete verificatie om lokale ODBC-aanroepen te genereren die mogelijk vereist zijn voor het script. Deze functie werkte echter niet in de RTM-build van SQL Server 2016 (13.x) Express.
Om het probleem op te lossen, raden we u aan een upgrade uit te voeren naar een latere servicerelease. Als een upgrade niet haalbaar is, gebruikt u als tijdelijke oplossing een SQL-aanmelding om externe R-taken uit te voeren waarvoor mogelijk ingesloten ODBC-aanroepen zijn vereist.
Van toepassing op: SQL Server 2016 (13.x) R Services Express-editie
Prestatielimieten wanneer bibliotheken die door SQL Server worden gebruikt, worden aangeroepen vanuit andere hulpprogramma's
Het is mogelijk om de machine learning-bibliotheken aan te roepen die zijn geïnstalleerd voor SQL Server vanuit een externe toepassing, zoals RGui. Dit kan de handigste manier zijn om bepaalde taken uit te voeren, zoals het installeren van nieuwe pakketten of het uitvoeren van ad-hoctests op zeer korte codevoorbeelden. Buiten SQL Server kunnen de prestaties echter beperkt zijn.
Zelfs als u bijvoorbeeld de Enterprise-editie van SQL Server gebruikt, wordt R uitgevoerd in de modus met één thread wanneer u uw R-code uitvoert met behulp van externe hulpprogramma's. Als u de voordelen van prestaties in SQL Server wilt krijgen, start u een SQL Server-verbinding en gebruikt u sp_execute_external_script om de runtime van het externe script aan te roepen.
Over het algemeen moet u geen machine learning-bibliotheken aanroepen die worden gebruikt door SQL Server vanuit externe hulpprogramma's. Als u fouten in R- of Python-code moet opsporen, is het doorgaans eenvoudiger om dit buiten SQL Server te doen. Als u dezelfde bibliotheken wilt ophalen die zich in SQL Server bevinden, kunt u Microsoft R Client of SQL Server 2017 Machine Learning Server (zelfstandig) installeren.
SQL Server Data Tools biedt geen ondersteuning voor machtigingen die zijn vereist voor externe scripts
Wanneer u Visual Studio of SQL Server Data Tools gebruikt om een databaseproject te publiceren als een principal machtigingen heeft die specifiek zijn voor het uitvoeren van externe scripts, krijgt u mogelijk een foutmelding zoals deze:
TSQL-model: fout gedetecteerd bij reverse engineering van de database. De machtiging is niet herkend en is niet geïmporteerd.
Momenteel biedt het DACPAC-model geen ondersteuning voor de machtigingen die worden gebruikt door R Services of Machine Learning Services, zoals GRANT ANY EXTERNAL SCRIPT, of EXECUTE ANY EXTERNAL SCRIPT. Dit probleem wordt opgelost in een latere release.
Als tijdelijke oplossing voert u de aanvullende GRANT instructies uit in een script na de implementatie.
Uitvoering van extern script wordt beperkt vanwege standaardwaarden voor resourcebeheer
In Enterprise Edition kunt u resourcegroepen gebruiken om externe scriptprocessen te beheren. In sommige vroege release-builds was het maximale geheugen dat kan worden toegewezen aan de R-processen 20 procent. Als de server dus 32 GB RAM-geheugen heeft, kunnen de uitvoerbare R-bestanden (RTerm.exe en BxlServer.exe) maximaal 6,4 GB in één aanvraag gebruiken.
Als u resourcebeperkingen ondervindt, controleert u de huidige standaardwaarde. Als 20 procent niet voldoende is, raadpleegt u de documentatie voor SQL Server over het wijzigen van deze waarde.
Van toepassing op: SQL Server 2016 (13.x) R Services, Enterprise Edition
Fout bij gebruik sp_execute_external_script zonder libc++.so op Linux
Op een schone Linux-machine waarop libc++.so niet is geïnstalleerd, mislukt het uitvoeren van een sp_execute_external_script (SPEES) query met Java of een externe taal omdat commonlauncher.so het laden libc++.so mislukt.
Voorbeeld:
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
Dit mislukt met een bericht dat er ongeveer als volgt uitziet:
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.
In de mssql-launchpadd logboeken wordt een foutbericht weergegeven dat er ongeveer als volgt uitziet:
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
Tijdelijke maatregel
U kunt een van de volgende tijdelijke oplossingen uitvoeren:
Kopiëren
libc++*van/opt/mssql/libnaar het standaardsysteempad/lib64Voeg de volgende vermeldingen toe aan
/var/opt/mssql/mssql.confom het pad zichtbaar te maken:[extensibility] readabledirectories = /opt/mssql
Van toepassing op: SQL Server 2019 (15.x) op Linux
Installatie- of upgradefout op FIPS-geactiveerde servers
Als u SQL Server 2019 (15.x) installeert met de functie Machine Learning Services en taalextensies of het SQL Server-exemplaar bijwerkt op een FIPS-server (Federal Information Processing Standard), krijgt u de volgende fout:
Er is een fout opgetreden tijdens het installeren van de extensibiliteitsfunctie met foutmelding: AppContainer-creatie mislukt met foutmelding NONE. Deze implementatie maakt geen deel uit van de cryptografische algoritmen die door het Windows Platform FIPS zijn gevalideerd.
Tijdelijke maatregel
Schakel FIPS uit vóór de installatie van SQL Server 2019 (15.x) met de functie Machine Learning Services en taalextensies of upgrade van het SQL Server-exemplaar. Zodra de installatie of upgrade is voltooid, kunt u FIPS opnieuw inschakelen.
van toepassing op: SQL Server 2019 (15.x)
R-bibliotheken gebaseerd op specifieke algoritmen, streaming of partitionering
Probleem
De volgende beperkingen gelden voor SQL Server 2017 (14.x) met runtime-upgrade. Dit probleem is van toepassing op Enterprise Edition.
- Parallelisme:
RevoScaleRenMicrosoftMLalgoritme-thread-parallelisme voor scenario's is beperkt tot maximaal twee threads. - Streaming en partitionering: scenario's waarin de
@r_rowsPerRead-parameter die wordt doorgegeven aan T-SQLsp_execute_external_scriptniet wordt toegepast. - Streaming en partitionering:
RevoScaleRenMicrosoftMLgegevensbronnen (zoalsODBC,XDF) bieden geen ondersteuning voor het lezen van rijen in delen voor trainings- of scoringsscenario's. Deze scenario's brengen altijd alle gegevens naar het geheugen voor berekeningen en de bewerkingen zijn afhankelijk van het geheugen
Solution
De beste oplossing is om een upgrade uit te voeren naar SQL Server 2019 (15.x). U kunt ook SQL Server 2017 (14.x) blijven gebruiken met runtime-upgrade die is geconfigureerd met behulp van RegisterRext.exe /configure, nadat u de volgende taken hebt voltooid.
- Bewerk het register om een sleutel
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150te maken en voeg een waardeSharedCodetoe met gegevensC:\Program Files\Microsoft SQL Server\150\Sharedof de gedeelde exemplaarmap, zoals geconfigureerd. - Maak een map
C:\Program Files\Microsoft SQL Server\150\Shared and copy instapi140.dllvan de mapC:\Program Files\Microsoft SQL Server\140\Sharednaar de zojuist gemaakte map. - Wijzig de naam van de
instapi140.dllininstapi150.dllin de nieuwe mapC:\Program Files\Microsoft SQL Server\150\Shared.
Belangrijk
Als u de bovenstaande stappen uitvoert, moet u de toegevoegde sleutel handmatig verwijderen voordat u een upgrade uitvoert naar een latere versie van SQL Server.
Prestatieproblemen met procesgroepering in ML Services (R en Python)
Deze sectie bevat bekende problemen en tijdelijke oplossingen voor het gebruik van ML-services (R en Python) in SQL Server.
Koude startprestaties van procespooling in ML Services
Wanneer de launchpad-service sp_execute_external_script wordt uitgevoerd, worden er satellietprocessen gestart die de externe runtimes zoals bijvoorbeeld R en Python starten. Als u de opstartkosten wilt afschrijven, wordt er een groep processen gemaakt die kan worden gebruikt in de volgende uitvoering van sp_execute_external_script. Deze groep processen is specifiek voor deze gebruiker, database en de gebruikte taal (R of Python in ML Services).
Eerste query-uitvoering
De satellietprocessen moeten worden opgewarmd wanneer sp_execute_external_script ze voor de eerste keer of na een periode van niet-actieve tijd worden uitgevoerd (de processen worden beëindigd via een opschoontaak als ze gedurende een tijdje niet worden gebruikt). Koude start van dergelijke poolprocessen kan traag zijn (bijvoorbeeld vanwege beperkingen in middelen).
Tijdelijke maatregel
Als de prestaties van de eerste aanroep belangrijk zijn, is het raadzaam om de query's warm te houden. Een achtergrondtaak kan bijvoorbeeld worden uitgevoerd waarmee een eenvoudige sp_execute_external_script query wordt uitgevoerd voordat de processen verlopen. Als u bijvoorbeeld R-query's warm wilt houden, kunt u de volgende query periodiek uitvoeren.
EXECUTE sp_execute_external_script @language = N'R', @script = N'';
GO
Groot aantal gelijktijdige queries
Als het aantal gelijktijdige uitvoeringen sp_execute_external_script hoger is dan de actieve R/Python-processen in de pool, kan het koude begin van het toevoegen van extra processen aan de pool traag zijn (bijvoorbeeld vanwege resourcebeperkingen).
Tijdelijke maatregel
Om het prestatieprobleem met schalen te verhelpen, kunnen meerdere aanvragen worden gebatcheerd (bijvoorbeeld via loopback-verbindingen of het script herschrijven om meerdere aanvragen af te handelen). Voor realtime scenario's kan daarnaast SQL PREDICT worden gebruikt.
Problemen met het uitvoeren van R-scripts
Deze sectie bevat bekende problemen die specifiek zijn voor het uitvoeren van R op SQL Server, evenals enkele problemen die betrekking hebben op de R-bibliotheken en -hulpprogramma's die zijn gepubliceerd door Microsoft, waaronder RevoScaleR.
Zie de Machine Learning Server-site voor aanvullende bekende problemen die van invloed kunnen zijn op R-oplossingen.
Waarschuwing voor geweigerde toegang bij het uitvoeren van R-scripts op SQL Server op een niet-standaardlocatie
Als het exemplaar van SQL Server is geïnstalleerd op een niet-standaardlocatie, zoals buiten de Program Files map, wordt de waarschuwing ACCESS_DENIED gegenereerd wanneer u scripts probeert uit te voeren waarmee een pakket wordt geïnstalleerd. Voorbeeld:
In
normalizePath(path.expand(path), winslash, mustWork): path[2]="~ExternalLibraries/R/8/1": Toegang wordt geweigerd
De reden hiervoor is dat een R-functie probeert het pad te lezen en mislukt als de ingebouwde gebruikersgroep SQLRUserGroup geen leestoegang heeft. De waarschuwing die wordt gegenereerd, blokkeert de uitvoering van het huidige R-script niet, maar de waarschuwing kan herhaaldelijk optreden wanneer de gebruiker een ander R-script uitvoert.
Als u SQL Server op de standaardlocatie hebt geïnstalleerd, treedt deze fout niet op omdat alle Windows-gebruikers leesmachtigingen voor de Program Files map hebben.
Dit probleem wordt opgelost in een toekomstige servicerelease. Als tijdelijke oplossing geeft u de groep SQLRUserGroup leestoegang tot alle bovenliggende mappen van ExternalLibraries.
Serialisatiefout tussen oude en nieuwe versies van RevoScaleR
Wanneer u een model met behulp van een geserialiseerde indeling doorgeeft aan een extern SQL Server-exemplaar, krijgt u mogelijk de volgende fout:
Fout in memDecompress(data, type = decompress) interne foutmelding -3 in memDecompress(2).
Deze fout treedt op als u het model hebt opgeslagen met behulp van een recente versie van de serialisatiefunctie rxSerializeModel, maar het SQL Server-exemplaar waarin u het model deserialiseert, heeft een oudere versie van de RevoScaleR-API's, van SQL Server 2017 (14.x) CU 2 of eerder.
Als tijdelijke oplossing kunt u het SQL Server 2017-exemplaar (14.x) upgraden naar CU 3 of hoger.
De fout wordt niet weergegeven als de API-versie hetzelfde is of als u een model verplaatst dat is opgeslagen met een oudere serialisatiefunctie naar een server die gebruikmaakt van een nieuwere versie van de serialisatie-API.
Met andere woorden, gebruik dezelfde versie van RevoScaleR voor zowel serialisatie- als deserialisatiebewerkingen.
Realtime scoring verwerkt de learningRate parameter niet correct in boom- en bosmodellen.
Als u een model maakt met behulp van een beslissingsboom of beslissingsbosmethode en de leersnelheid opgeeft, ziet u mogelijk inconsistente resultaten wanneer u sp_rxpredict of de SQL-functie PREDICT gebruikt, in vergelijking met het gebruik van rxPredict.
De oorzaak is een fout in de API die geserialiseerde modellen verwerkt en is beperkt tot de learningRate parameter: bijvoorbeeld in rxBTrees of
Dit probleem wordt opgelost in een toekomstige servicerelease.
Beperkingen voor processoraffiniteit voor R-taken
In de eerste release-build van SQL Server 2016 (13.x) kunt u alleen processoraffiniteit instellen voor CPU's in de eerste k-groep. Als de server bijvoorbeeld een 2-socketmachine met twee k-groepen is, worden alleen processors van de eerste k-groep gebruikt voor de R-processen. Dezelfde beperking geldt wanneer u resourcebeheer configureert voor R-scripttaken.
Dit probleem is opgelost in SQL Server 2016 (13.x) Service Pack 1. U wordt aangeraden een upgrade uit te voeren naar de nieuwste servicerelease.
Van toepassing op: SQL Server 2016 (13.x) R Services (RTM-versie)
Wijzigingen in kolomtypen kunnen niet worden uitgevoerd bij het lezen van gegevens in een SQL Server-rekencontext
Als uw rekencontext is ingesteld op het SQL Server-exemplaar, kunt u het argument colClasses (of andere vergelijkbare argumenten) niet gebruiken om het gegevenstype van kolommen in uw R-code te wijzigen.
De volgende instructie zou bijvoorbeeld resulteren in een fout als de kolom CRSDepTimeStr nog geen geheel getal is:
data <- RxSqlServerData(
sqlQuery = "SELECT CRSDepTimeStr, ArrDelay FROM AirlineDemoSmall",
connectionString = connectionString,
colClasses = c(CRSDepTimeStr = "integer"))
Als tijdelijke oplossing kunt u de SQL-query herschrijven om CAST of CONVERT te gebruiken en de gegevens aan R te presenteren met behulp van het juiste gegevenstype. Over het algemeen zijn de prestaties beter wanneer u met gegevens werkt met behulp van SQL in plaats van gegevens in de R-code te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) R Services
Limieten voor de grootte van geserialiseerde modellen
Wanneer u een model opslaat in een SQL Server-tabel, moet u het model serialiseren en opslaan in een binaire indeling. Theoretisch is de maximale grootte van een model dat kan worden opgeslagen met deze methode 2 GB. Dit is de maximale grootte van varbinaire kolommen in SQL Server.
Als u grotere modellen wilt gebruiken, zijn de volgende tijdelijke oplossingen beschikbaar:
Voer stappen uit om de grootte van uw model te verkleinen. Sommige opensource R-pakketten bevatten veel informatie in het modelobject en veel van deze informatie kan worden verwijderd voor implementatie.
Gebruik functieselectie om overbodige kolommen te verwijderen.
Als u een opensource-algoritme gebruikt, kunt u een vergelijkbare implementatie overwegen met behulp van het bijbehorende algoritme in MicrosoftML of RevoScaleR. Deze pakketten zijn geoptimaliseerd voor implementatiescenario's.
Nadat het model is gerationaliseerd en de grootte is verkleind met behulp van de voorgaande stappen, controleert u of de functie memCompress in base R kan worden gebruikt om de grootte van het model te verkleinen voordat het wordt doorgegeven aan SQL Server. Deze optie is het beste wanneer het model dicht bij de limiet van 2 GB ligt.
Voor grotere modellen kunt u de functie SQL Server FileTable gebruiken om de modellen op te slaan in plaats van een varbinaire kolom te gebruiken.
Als u FileTables wilt gebruiken, moet u een firewalluitzondering toevoegen, omdat gegevens die zijn opgeslagen in FileTables worden beheerd door het bestandssysteemstuurprogramma Filestream in SQL Server en de standaardfirewallregels de toegang tot netwerkbestanden blokkeren. Voor meer informatie, zie Vereisten voor FileTable inschakelen.
Nadat u FileTable hebt ingeschakeld, krijgt u met behulp van de FileTable-API een pad van SQL. Vervolgens schrijft u vanuit uw code het model naar die locatie. Wanneer u het model moet lezen, krijgt u het pad van SQL Server en roept u het model aan met behulp van het pad van uw script. Zie FileTables openen met File Input-Output API's voor meer informatie.
Vermijd het wissen van werkruimten wanneer u R-code uitvoert in een SQL Server-rekencontext
Als u een R-opdracht gebruikt om uw werkruimte met objecten te wissen tijdens het uitvoeren van R-code in een SQL Server-rekencontext, of de werkruimte wist als onderdeel van een R-script dat wordt aangeroepen met behulp van sp_execute_external_script, kunt u de fout krijgen: werkruimte-object revoScriptConnection niet gevonden.
revoScriptConnection is een object in de R-werkruimte met informatie over een R-sessie die wordt aangeroepen vanuit SQL Server. Als uw R-code echter een opdracht bevat om de werkruimte te wissen (zoals rm(list=ls()))alle informatie over de sessie en andere objecten in de R-werkruimte wordt ook gewist.
Vermijd als tijdelijke oplossing het wissen van variabelen en andere objecten terwijl u R uitvoert in SQL Server. Hoewel het wissen van de werkruimte gebruikelijk is bij het werken in de R-console, kan dit onbedoelde gevolgen hebben.
- Als u specifieke variabelen wilt verwijderen, gebruikt u de functie R
remove: bijvoorbeeldremove('name1', 'name2', ...) - Als er meerdere variabelen zijn om te verwijderen, slaat u de namen van tijdelijke variabelen op in een lijst en voert u periodieke garbagecollection uit.
Beperkingen voor gegevens die kunnen worden opgegeven als invoer voor een R-script
U kunt niet in een R-script de volgende typen queryresultaten gebruiken:
Gegevens uit een Transact-SQL query die verwijst naar AlwaysEncrypted-kolommen.
Gegevens uit een Transact-SQL query die verwijst naar gemaskeerde kolommen.
Als u gemaskeerde gegevens in een R-script wilt gebruiken, is een mogelijke tijdelijke oplossing om een kopie van de gegevens in een tijdelijke tabel te maken en die gegevens te gebruiken.
Gebruik van tekenreeksen als factoren kunnen leiden tot prestatievermindering
Het gebruik van variabelen voor tekenreekstypen als factoren kunnen de hoeveelheid geheugen die wordt gebruikt voor R-bewerkingen aanzienlijk verhogen. Dit is een bekend probleem met R in het algemeen en er zijn veel artikelen over het onderwerp. Zie bijvoorbeeld Factoren zijn geen eersteklas burgers in R, door John Mount, op R-bloggers of stringsAsFactors: Een niet-geautoriseerde biografie, door Roger Peng.
Hoewel het probleem niet specifiek is voor SQL Server, kan dit van invloed zijn op de prestaties van R-codeuitvoering in SQL Server. Tekenreeksen worden meestal opgeslagen als varchar of nvarchar, en als een kolom met tekenreeksgegevens veel unieke waarden heeft, kan het proces van intern converteren naar gehele getallen en terug naar tekenreeksen door R zelfs leiden tot geheugentoewijzingsfouten.
Als u geen tekenreeksgegevenstype voor andere bewerkingen nodig hebt, zijn de tekenreekswaarden toewijzen aan een numeriek gegevenstype (geheel getal) als onderdeel van de gegevensvoorbereiding nuttig vanuit het perspectief van prestaties en schaal.
Zie Prestaties voor R Services - gegevensoptimalisatie voor een bespreking van dit probleem en andere tips.
Argumenten varsToKeep en varsToDrop worden niet ondersteund voor SQL Server-gegevensbronnen
Wanneer u de functie rxDataStep gebruikt om resultaten naar een tabel te schrijven, is het handig om met de functie varsToKeep en varsToDrop de kolommen op te geven die moeten worden opgenomen of uitgesloten als onderdeel van de bewerking. Deze argumenten worden echter niet ondersteund voor SQL Server-gegevensbronnen.
Beperkte ondersteuning voor SQL-gegevenstypen in sp_execute_external_script
Niet alle gegevenstypen die worden ondersteund in SQL, kunnen worden gebruikt in R. Als tijdelijke oplossing kunt u het niet-ondersteunde gegevenstype naar een ondersteund gegevenstype casten voordat u de gegevens doorgeeft aan sp_execute_external_script.
Zie R-bibliotheken en -gegevenstypen voor meer informatie.
Mogelijke tekenreeksbeschadiging met Unicode-tekenreeksen in varchar-kolommen
Het doorgeven van Unicode-gegevens in varchar-kolommen van SQL Server aan R/Python kan leiden tot beschadiging van tekenreeksen. Dit komt doordat de codering voor deze Unicode-tekenreeksen in SQL Server-sorteringen mogelijk niet overeenkomt met de standaard-UTF-8-codering die wordt gebruikt in R/Python.
Als u niet-ASCII-tekenreeksgegevens wilt verzenden van SQL Server naar R/Python, gebruikt u UTF-8-codering (beschikbaar in SQL Server 2019 (15.x)) of gebruikt u nvarchar-type voor hetzelfde.
Slechts één waarde van het type raw kan worden geretourneerd van sp_execute_external_script
Wanneer een binair gegevenstype (het onbewerkte R-gegevenstype) wordt geretourneerd vanuit R, moet de waarde worden verzonden in het uitvoergegevensframe.
Met andere gegevenstypen dan onbewerkte gegevens kunt u parameterwaarden retourneren, samen met de resultaten van de opgeslagen procedure door het trefwoord UITVOER toe te voegen. Zie Parameters voor meer informatie.
Als u meerdere uitvoersets wilt gebruiken die waarden van het type onbewerkt bevatten, is een mogelijke tijdelijke oplossing om meerdere aanroepen van de opgeslagen procedure uit te voeren of om de resultatensets terug te sturen naar SQL Server met behulp van ODBC.
Verlies van precisie
Omdat Transact-SQL en R verschillende gegevenstypen ondersteunen, kunnen numerieke gegevenstypen tijdens de conversie verlies van precisie lijden.
Zie R-bibliotheken en -gegevenstypen voor meer informatie over impliciete conversie van gegevenstypen.
Fout met variabele bereik wanneer u de parameter transformFunc gebruikt
Als u gegevens wilt transformeren terwijl u modelleert, kunt u een transformFunc-argument doorgeven in een functie, zoals rxLinmod of rxLogit. Geneste functieaanroepen kunnen echter leiden tot bereikfouten in de SQL Server-rekencontext, zelfs als de aanroepen correct werken in de lokale rekencontext.
De voorbeeldgegevensset voor de analyse heeft geen variabelen
Stel dat u twee functies hebt gedefinieerd, f en gin uw lokale globale omgeving en g aanroepen f. Bij gedistribueerde of externe aanroepen met g kan de oproep naar g mislukken met deze fout, omdat f niet kan worden gevonden, zelfs niet als u zowel f als g aan de externe oproep hebt doorgegeven.
Als u dit probleem ondervindt, kunt u het probleem omzeilen door de definitie van f in te sluiten binnen uw definitie van g, en ervoor te zorgen dat dit gebeurt voor het moment waarop g normaal gesproken f zou aanroepen.
Voorbeeld:
f <- function(x) { 2*x * 3 }
g <- function(y) {
a <- 10 * y
f(a)
}
U kunt de fout voorkomen door de definitie als volgt te herschrijven:
g <- function(y){
f <- function(x) { 2*x +3}
a <- 10 * y
f(a)
}
Gegevens importeren en bewerken met RevoScaleR
Wanneer varchar-kolommen uit een database worden gelezen, wordt witruimte ingekort. Om dit te voorkomen, plaatst u tekenreeksen tussen niet-spatietekens.
Wanneer functies zoals rxDataStep worden gebruikt voor het maken van databasetabellen met varchar-kolommen , wordt de kolombreedte geschat op basis van een steekproef van de gegevens. Als de breedte kan variëren, kan het nodig zijn om alle tekenreeksen op te vullen tot een gemeenschappelijke lengte.
Het gebruik van een transformatie om het gegevenstype van een variabele te wijzigen, wordt niet ondersteund wanneer herhaalde aanroepen naar rxImport of rxTextToXdf worden gebruikt voor het importeren en toevoegen van rijen, waarbij meerdere invoerbestanden worden gecombineerd tot één XDF-bestand.
Beperkte ondersteuning voor rxExec
In SQL Server 2016 (13.x) kan de rxExec functie die wordt geleverd door het RevoScaleR-pakket alleen worden gebruikt in de modus met één thread.
Verhoog de maximale parametergrootte ter ondersteuning van rxGetVarInfo
Als u gegevenssets gebruikt met extreem grote aantallen variabelen (bijvoorbeeld meer dan 40.000), stelt u de max-ppsize vlag in wanneer u R start met het gebruik van functies zoals rxGetVarInfo. Met max-ppsize de vlag wordt de maximale grootte van de aanwijzerbeveiligingsstack opgegeven.
Als u de R-console gebruikt (bijvoorbeeld RGui.exe of RTerm.exe), kunt u de waarde van max-ppsize instellen op 500000 door het volgende te typen:
R --max-ppsize=500000
Problemen met de rxDTree-functie
De rxDTree functie biedt momenteel geen ondersteuning voor transformaties in formules. Het gebruik van de F() syntaxis voor het maken van factoren ter plekke wordt niet ondersteund. Numerieke gegevens worden echter automatisch binned.
Geordende factoren worden hetzelfde behandeld als factoren in alle RevoScaleR-analysefuncties, behalve rxDTree.
data.table als een OutputDataSet in R
Het gebruik data.table als een OutputDataSet in R wordt niet ondersteund in SQL Server 2017 (14.x) Cumulatieve update 13 (CU 13) en eerder. Het volgende bericht wordt mogelijk weergegeven:
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 een OutputDataSet in R wordt in SQL Server 2017 (14.x) Cumulatieve Update 14 (CU 14) en hoger ondersteund.
Een lang script uitvoeren mislukt tijdens het installeren van een bibliotheek
Als u een langdurige externe scriptsessie uitvoert en de dbo parallel probeert een bibliotheek op een andere database te installeren, kan het script worden beëindigd.
Bijvoorbeeld het uitvoeren van dit externe script voor de 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
Terwijl de dbo parallel een bibliotheek installeert 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
Het vorige langlopende externe script voor de master database wordt beëindigd met het volgende foutbericht:
Er is een R-scriptfout opgetreden tijdens het uitvoeren van 'sp_execute_external_script' met HRESULT-0x800704d4.
Tijdelijke maatregel
Voer de installatie van de bibliotheek niet tegelijkertijd met de langlopende query uit. Of voer de langlopende query opnieuw uit nadat de installatie is voltooid.
Van toepassing op: ALLEEN SQL Server 2019 (15.x) op Linux & Big Data-clusters.
SQL Server reageert niet meer bij het uitvoeren van R-scripts met parallelle uitvoering
SQL Server 2019 (15.x) bevat een regressie die van invloed is op R-scripts die gebruikmaken van parallelle uitvoering. Voorbeelden hiervan zijn het gebruik van rxExecRxLocalPar rekencontext en scripts die gebruikmaken van het parallelle pakket. Dit probleem wordt veroorzaakt door fouten die het parallelle pakket tegenkomt bij het schrijven naar het null-apparaat tijdens het uitvoeren in SQL Server.
van toepassing op: SQL Server 2019 (15.x).
Precisieverlies voor geld/numerieke/decimale/bigint-gegevenstypen
Door sp_execute_external_script een R-script uit te voeren, kunt u geld, numerieke, decimale en bigint-gegevenstypen als invoergegevens gebruiken. Omdat ze echter worden geconverteerd naar het numerieke type R, lijden ze een precisieverlies met waarden die zeer hoog zijn of decimale kommawaarden hebben.
- geld: Soms zijn centwaarden onnauwkeurig en wordt er een waarschuwing gegeven: Waarschuwing: kan centwaarden niet precies vertegenwoordigen.
-
numeriek/decimaal:
sp_execute_external_scriptmet een R-script wordt het volledige bereik van deze gegevenstypen niet ondersteund en worden de laatste paar decimale cijfers gewijzigd, vooral die met breuken. - bigint: R biedt alleen ondersteuning voor maximaal 53-bits gehele getallen en dan begint het precisieverlies te hebben.
Problemen met de rxExecBy-functie - rxExecBy-functie kan geïnstalleerd pakket niet vinden
Wanneer de rxExecBy functie wordt aangeroepen, wordt een nieuw R-runtimeproces gestart. Dit nieuwe proces heeft geen bijgewerkte bibliotheekpaden, dus pakketten die zijn geïnstalleerd op andere locaties dan het standaardbibliotheekpad, worden niet gevonden tijdens de uitvoering.
Tijdelijke maatregel
Het pad naar R-pakketten moet expliciet worden bijgewerkt. Stel dat de pakketten zijn geïnstalleerd in het pad naar externe bibliotheken. Het volgende R-script kan worden gebruikt om het bibliotheekpad bij te werken: .libPaths(c(Sys.getenv("MRS_EXTLIB_USER_PATH"), Sys.getenv("MRS_EXTLIB_SHARED_PATH"), .libPaths()))
Problemen met uitvoering van Python-scripts
Deze sectie bevat bekende problemen die specifiek zijn voor het uitvoeren van Python op SQL Server, evenals problemen die zijn gerelateerd aan de Python-pakketten die zijn gepubliceerd door Microsoft, waaronder revoscalepy en microsoftml.
Aanroepen naar vooraf getraind model mislukt als het pad naar het model te lang is
Als u de vooraf getrainde modellen in een vroege release van SQL Server 2017 (14.x) hebt geïnstalleerd, kan het volledige pad naar het getrainde modelbestand te lang zijn om Python te lezen. Deze beperking is opgelost in een latere servicerelease.
Er zijn verschillende mogelijke tijdelijke oplossingen:
- Wanneer u de vooraf getrainde modellen installeert, kiest u een aangepaste locatie.
- Installeer indien mogelijk het SQL Server-exemplaar onder een aangepast installatiepad met een korter pad, zoals
C:\SQL\MSSQL14.MSSQLSERVER. - Gebruik het Windows-hulpprogramma Fsutil om een vaste koppeling te maken waarmee het modelbestand wordt toegewezen aan een korter pad.
- Update naar de nieuwste servicerelease.
Fout bij het opslaan van een geserialiseerd model in SQL Server
Wanneer u een model doorgeeft aan een extern SQL Server-exemplaar en probeert het binaire model te lezen met behulp van de rx_unserialize functie in revoscalepy, krijgt u mogelijk de volgende fout:
NameError: naam 'rx_unserialize_model' is niet gedefinieerd
Deze fout treedt op als u het model hebt opgeslagen met behulp van een recente versie van de serialisatiefunctie, maar het SQL Server-exemplaar waarin u het model deserialiseert, herkent de serialisatie-API niet.
Als u het probleem wilt oplossen, moet u het SQL Server 2017-exemplaar (14.x) upgraden naar CU 3 of hoger.
Het niet initialiseren van een varbinaire variabele veroorzaakt een fout in BxlServer
Als u Python-code uitvoert in SQL Server met sp_execute_external_script en de uitvoervariabelen van de code van het type varbinary(max), varchar(max) of vergelijkbare typen zijn, moet de variabele als onderdeel van uw script worden geïnitialiseerd of ingesteld. Anders veroorzaakt het gegevensuitwisselingsonderdeel BxlServer een fout en werkt het niet meer.
Deze beperking wordt opgelost in een toekomstige servicerelease. Als tijdelijke oplossing moet u ervoor zorgen dat de variabele wordt geïnitialiseerd in het Python-script. Elke geldige waarde kan worden gebruikt, zoals in de volgende voorbeelden:
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
Telemetriewaarschuwing bij geslaagde uitvoering van Python-code
Vanaf SQL Server 2017 (14.x) CU 2 wordt het volgende bericht mogelijk weergegeven, zelfs als Python-code anders wordt uitgevoerd:
STDERR-bericht(en) van extern script:~PYTHON_SERVICES\lib\site-packages\revoscalepy\utils\RxTelemetryLoggerSyntaxWarning: telemetry_state wordt gebruikt vóór globale declaratie
Dit probleem is opgelost in SQL Server 2017 (14.x) Cumulatieve update 3 (CU 3).
Gegevenstypen numeriek, decimaal en geld worden niet ondersteund
Vanaf SQL Server 2017 (14.x) Cumulatieve update 12 (CU 12), numerieke, decimale en geldgegevenstypen in WITH RESULT SETS worden niet ondersteund bij het gebruik van Python met sp_execute_external_script. De volgende berichten worden mogelijk weergegeven:
[Code: 39004, SQL State: S1000] Er is een Python-scriptfout opgetreden tijdens het uitvoeren van 'sp_execute_external_script' met HRESULT-0x80004004.
[Code: 39019, SQL State: S1000] Er is een externe scriptfout opgetreden:
SqlSatelliteCall-fout: Niet-ondersteund type in uitvoerschema. Ondersteunde typen: bit, smallint, int, datetime, smallmoney, real en float. char, varchar wordt gedeeltelijk ondersteund.
Dit is opgelost in SQL Server 2017 (14.x) Cumulatieve update 14 (CU 14).
Fout met ongeldige interpreter bij het installeren van Python-pakketten met pip op Linux
Als u pip probeert te gebruiken op SQL Server 2019 (15.x). Voorbeeld:
/opt/mssql/mlservices/runtime/python/bin/pip -h
Vervolgens krijgt u deze fout:
bash: /opt/mssql/mlservices/runtime/python/bin/pip: /opt/microsoft/mlserver/9.4.7/bin/python:bad interpreter: No such file or directory
Tijdelijke maatregel
Install pip vanuit de Python Package Authority (PyPA):
wget 'https://bootstrap.pypa.io/get-pip.py'
/opt/mssql/mlservices/bin/python/python ./get-pip.py
Van toepassing op: SQL Server 2019 (15.x) op Linux
Python-pakketten kunnen niet worden geïnstalleerd na pip de installatie van SQL Server 2019 in Windows
Nadat u SQL Server 2019 (15.x) in Windows hebt geïnstalleerd, mislukt het installeren van een Python-pakket via pip vanaf een DOS-opdrachtregel. Voorbeeld:
pip install quantfolio
Hiermee wordt de volgende fout geretourneerd:
pip is geconfigureerd met locaties waarvoor TLS/SSL is vereist, maar de SSL-module in Python is niet beschikbaar.
Dit is een probleem dat specifiek is voor het Anaconda-pakket. Deze wordt opgelost in een toekomstige servicerelease.
Tijdelijke maatregel
Kopieer de volgende bestanden:
libssl-1_1-x64.dlllibcrypto-1_1-x64.dll
uit de map
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin
naar de map
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs
Open vervolgens een nieuwe DOS-opdrachtshellprompt.
Van toepassing op: SQL Server 2019 (15.x) in Windows
Fout bij gebruik sp_execute_external_script zonder libc++abo.so op Linux
Op een schone Linux-machine waar libc++abi.so niet is geïnstalleerd, mislukt het uitvoeren van een sp_execute_external_script (SPEES)-query met de foutmelding 'Geen dergelijk bestand of directory'.
Voorbeeld:
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
Tijdelijke maatregel
Voer de volgende opdracht uit:
sudo cp /opt/mssql/lib/libc++abi.so.1 /opt/mssql-extensibility/lib/
Van toepassing op: SQL Server 2019 (15.x) op Linux
Algemene fout bij uitvoering sp_execute_external_script op Ubuntu 20.04 met SQL Server 2022 CU6 op Linux
Het installeren van SQL Server 2022 CU6 voor Linux op Ubuntu 20.04 kan leiden tot de volgende fout bij het uitvoeren sp_execute_external_script van R- en Python-scripts:
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]
Tijdelijke maatregel
Voer de volgende opdracht uit om de pakketafhankelijkheid libssl-dev te installeren, waarmee SQL Server de gedeelde bibliotheken die door het systeem zijn geleverd, libssl en libcrypto kan oplossen.
sudo apt-get update
sudo apt-get install libssl-dev
Fout bij het maken van firewallregels in modprobe bij het uitvoeren van mssql-launchpadd op Linux
Wanneer u de logboeken van mssql-launchpadd met behulp van sudo journalctl -a -u mssql-launchpadd bekijkt, ziet u mogelijk een fout bij het maken van een firewallregel die vergelijkbaar is met de volgende uitvoer.
-- 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
Tijdelijke maatregel
Voer de volgende opdrachten uit om de SQL Server Launchpad-service te configureren modprobeen opnieuw op te starten:
sudo modprobe ip6_tables
sudo systemctl restart mssql-launchpadd
Van toepassing op: SQL Server 2019 (15.x) en hoger in Linux
Kan pakket niet installeren tensorflow met behulp van sqlmlutils
Het sqlmlutils pakket wordt gebruikt om Python-pakketten te installeren in SQL Server 2019 (15.x). U moet Microsoft Visual C++ 2015-2019 Redistributable (x64) downloaden, installeren en bijwerken. Het tensorflow pakket kan echter niet worden geïnstalleerd met behulp van sqlmlutils. Het tensorflow pakket is afhankelijk van een nieuwere versie van numpy dan de versie die is geïnstalleerd in SQL Server. Echter, numpy is een vooraf geïnstalleerd systeempakket dat sqlmlutils niet kan worden bijgewerkt wanneer geprobeerd wordt tensorflow te installeren.
Tijdelijke maatregel
Voer met behulp van een opdrachtprompt in de beheerdersmodus de volgende opdracht uit, waarbij u MSSQLSERVER vervangt door de naam van uw SQL Server-exemplaar:
"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe" -m pip install --upgrade tensorflow
Als u een "TLS/SSL"-fout krijgt, raadpleeg 7. Python-pakketten kunnen niet worden geïnstalleerd met pip eerder in dit artikel.
Van toepassing op: SQL Server 2019 (15.x) in Windows
Revolution R Enterprise en Microsoft R Open
In deze sectie vindt u problemen die specifiek zijn voor R-connectiviteit, -ontwikkeling en prestatiehulpprogramma's die worden geleverd door Revolution Analytics. Deze hulpprogramma's zijn geleverd in eerdere voorlopige versies van SQL Server.
Over het algemeen raden we u aan deze vorige versies te verwijderen en de nieuwste versie van SQL Server of Microsoft R Server te installeren.
Revolution R Enterprise wordt niet ondersteund
Het installeren van Revolution R Enterprise naast een versie van R Services (In-Database) wordt niet ondersteund.
Als u een bestaande licentie voor Revolution R Enterprise hebt, moet u deze op een afzonderlijke computer plaatsen van zowel het SQL Server-exemplaar als elk werkstation dat u wilt gebruiken om verbinding te maken met het SQL Server-exemplaar.
Sommige voorlopige versies van R Services (In-Database) bevatten een R-ontwikkelomgeving voor Windows die is gemaakt door Revolution Analytics. Dit hulpprogramma wordt niet meer geleverd en wordt niet ondersteund.
Voor compatibiliteit met R Services (In-Database) wordt u aangeraden in plaats daarvan Microsoft R Client te installeren. R Tools voor Visual Studio en Visual Studio Code ondersteunt ook Microsoft R-oplossingen.
Compatibiliteitsproblemen met SQLite ODBC-stuurprogramma en RevoScaleR
Revisie 0.92 van het SQLite ODBC-stuurprogramma is niet compatibel met RevoScaleR. Revisies 0.88-0.91 en 0,93 en hoger zijn bekend compatibel.