Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores
Importante
O suporte ao Machine Learning Server (anteriormente conhecido como R Server) terminou a 1 de julho de 2022. Para obter mais informações, consulte O que está acontecendo com o Servidor de Aprendizado de Máquina?
Este artigo descreve como recolher os dados de que precisa quando tenta resolver problemas nos SQL Server Machine Learning Services. Estes dados podem ser úteis quer esteja a resolver problemas sozinho ou com a ajuda do apoio ao cliente da Microsoft.
Versão e edição do SQL Server
O SQL Server 2016 R Services é a primeira versão do SQL Server a incluir suporte integrado para R. O SQL Server 2016 Service Pack 1 (SP1) inclui várias melhorias importantes, incluindo a capacidade de executar scripts externos. Se estiveres a usar o SQL Server 2016, deves considerar instalar o SP1 ou versões posteriores.
O SQL Server 2017 e posteriores têm integração com a linguagem Python. Não é possível obter integração de funcionalidades em Python em versões anteriores.
Dependendo da edição do SQL Server que estás a usar, algumas funcionalidades de aprendizagem automática podem estar indisponíveis ou ser limitadas.
Versões da linguagem R e das ferramentas
Em geral, a versão do Microsoft R que está instalada quando seleciona a funcionalidade R Services ou Machine Learning Services é determinada pelo número de compilação do SQL Server. Se atualizares ou corrigires o SQL Server, também deves atualizar ou corrigir os seus componentes R.
Para uma lista de versões e links para downloads de componentes R, consulte Instalar componentes de aprendizagem automática sem acesso à internet. Em computadores com acesso à internet, a versão necessária do R é identificada e instalada automaticamente.
É possível atualizar os componentes do R Server separadamente do motor de base de dados do SQL Server, num processo conhecido como binding. Portanto, a versão de R que utiliza ao executar código R no SQL Server pode variar dependendo tanto da versão instalada do SQL Server como de ter migrado o servidor para a versão mais recente do R.
Determinar a versão R
A forma mais fácil de determinar a versão R é obter as propriedades de runtime executando uma instrução como a seguinte:
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
# Transform R version properties to data.frame
OutputDataSet <- data.frame(
property_name = c("R.version", "Revo.version"),
property_value = c(R.Version()$version.string, Revo.version$version.string),
stringsAsFactors = FALSE)
# Retrieve properties like R.home, libPath & default packages
OutputDataSet <- rbind(OutputDataSet, data.frame(
property_name = c("R.home", "libPaths", "defaultPackages"),
property_value = c(R.home(), .libPaths(), paste(getOption("defaultPackages"), collapse=", ")),
stringsAsFactors = FALSE)
)
'
WITH RESULT SETS ((PropertyName nvarchar(100), PropertyValue nvarchar(4000)));
Sugestão
Se o R Services não estiver a funcionar, tente executar apenas a parte do script R do RGui.
Como último recurso, pode abrir ficheiros no servidor para determinar a versão instalada. Para isso, localize o ficheiro rlauncher.config para obter a localização do runtime R e do diretório de trabalho atual. Recomendamos que crie e abra uma cópia do ficheiro para não alterar acidentalmente nenhuma propriedade.
SQL Server 2016
C:\Program Files\Microsoft SQL Server\MSSQL13.<instance_name\MSSQL\Binn\rlauncher.configSQL Server 2017
C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Binn\rlauncher.config
Para obter as versões R e RevoScaleR, abre um prompt de comandos R ou abre o RGui associado à instância.
SQL Server 2016
C:\Program Files\Microsoft SQL Server\MSSQL13.<instancename>\R_SERVICES\bin\x64\RGui.exeSQL Server 2017
C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\R_SERVICES\bin\x64\RGui.exe
A consola R mostra a informação da versão no arranque. Por exemplo, a seguinte versão representa a configuração padrão para o SQL Server 2017:
*Microsoft R Open 3.3.3*
*The enhanced R distribution from Microsoft*
*Microsoft packages Copyright (C) 2017 Microsoft*
*Loading Microsoft R Server packages, version 9.1.0.*
Versões Python
Existem várias formas de obter a versão em Python. A forma mais fácil é executar esta instrução a partir do Management Studio ou de qualquer outra ferramenta de consulta SQL:
-- Get Python runtime properties:
exec sp_execute_external_script
@language = N'Python'
, @script = N'
import sys
import pkg_resources
OutputDataSet = pandas.DataFrame(
{"property_name": ["Python.home", "Python.version", "Revo.version", "libpaths"],
"property_value": [sys.executable[:-10], sys.version, pkg_resources.get_distribution("revoscalepy").version, str(sys.path)]}
)
'
with WITH RESULT SETS (SQL keywords) ((PropertyName nvarchar(100), PropertyValue nvarchar(4000)));
Se o Machine Learning Services não estiver a funcionar, pode determinar a versão Python instalada olhando para o ficheiro pythonlauncher.config. Recomendamos que crie e abra uma cópia do ficheiro para não alterar acidentalmente quaisquer propriedades.
- Para SQL Server 2017 apenas:
C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Log\ExtensibilityLog\pythonlauncher.config - Obtenha o valor do PYTHONHOME.
- Obtenha o valor do diretório de trabalho atual.
Note
Se instalou tanto Python como R no SQL Server 2017, o diretório de trabalho e o conjunto de contas de trabalhadores são partilhados para as linguagens R e Python.
Estão instaladas várias instâncias de R ou Python?
Verifique se mais do que uma cópia das bibliotecas R está instalada no computador. Esta duplicação pode ocorrer se:
- Durante a configuração, seleciona tanto R Services (In-Database) como R Server (Standalone).
- Instala-se o Microsoft R Client além do SQL Server.
- Um conjunto diferente de bibliotecas R foi instalado usando R Tools para Visual Studio, R Studio, Microsoft R Client ou outro IDE R.
- O computador aloja múltiplas instâncias do SQL Server, e mais do que uma instância utiliza aprendizagem automática.
As mesmas condições aplicam-se ao Python.
Se verificar que estão instaladas várias bibliotecas ou ambientes de execução, certifique-se de que obtém apenas os erros associados aos ambientes de execução do Python ou do R utilizados pela instância do SQL Server.
Origem dos erros
Os erros que vê quando tenta executar código R podem vir de qualquer uma das seguintes fontes:
- motor de base de dados do SQL Server, incluindo o procedimento armazenado sp_execute_external_script
- O Launchpad Confiável do SQL Server
- Outros componentes do framework de extensibilidade, incluindo lançadores R e Python e processos satélite
- Fornecedores, como o Microsoft Open Database Connectivity (ODBC)
- Linguagem R
Quando trabalha com o serviço pela primeira vez, pode ser difícil perceber que mensagens têm origem em que serviços. Recomendamos que capture não só o texto exato da mensagem, mas também o contexto em que viu a mensagem. Note o software cliente que está a usar para executar código de aprendizagem automática:
- Estás a usar o Management Studio? Uma aplicação externa?
- Está a executar código R num cliente remoto ou diretamente num procedimento armazenado?
Ficheiros de registo do SQL Server
Obtenha o ERRORLOG mais recente do SQL Server. O conjunto completo de registos de erro consiste nos ficheiros do seguinte diretório de registos predefinido:
SQL Server 2016
C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Log\ExtensibilityLogSQL Server 2017
C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2016\MSSQL\Log\ExtensibilityLog
Note
O nome exato da pasta varia consoante o nome da instância.
Erros devolvidos por sp_execute_external_script
Obtenha o texto completo dos erros que são devolvidos, se houver, quando executa o comando sp_execute_external_script.
Para eliminar problemas de R ou Python da consideração, pode executar este script, que inicia o runtime em R ou Python e passa os dados de um lado para o outro.
Para R
exec sp_execute_external_script @language =N'R',
@script=N'OutputDataSet<-InputDataSet',
@input_data_1 =N'select 1 as hello'
with result sets (([hello] int not null));
go
Para Python
exec sp_execute_external_script @language =N'Python',
@script=N'OutputDataSet= InputDataSet',
@input_data_1 =N'select 1 as hello'
with result sets (([hello] int not null));
go
Erros gerados pelo framework de extensibilidade
O SQL Server gera logs separados para os runtimes da linguagem de script externa. Estes erros não são gerados pela linguagem Python ou R. São gerados a partir dos componentes de extensibilidade do SQL Server, incluindo lançadores específicos de linguagem e os seus processos satélite.
Pode obter estes registos nas seguintes localizações padrão:
SQL Server 2016
C:\Program Files\Microsoft SQL Server\MSSQL13.<instance_name>\MSSQL\Log\ExtensibilityLogSQL Server 2017
C:\Program Files\Microsoft SQL Server\MSSQL14.<instance_name>\MSSQL\Log\ExtensibilityLog
Note
O nome exato da pasta varia consoante o nome da instância. Dependendo da tua configuração, a pasta pode estar num disco diferente.
Por exemplo, as seguintes mensagens de log estão relacionadas com o framework de extensibilidade:
Falha de LogonUser para o utilizador MSSQLSERVER01
Isto pode indicar que as contas worker que executam scripts externos não conseguem aceder à instância.
InicializePhysicalUsersPool falhou
Esta mensagem pode significar que as suas definições de segurança estão a impedir a configuração de criar o pool de contas de trabalhadores necessárias para executar scripts externos.
A inicialização do Security Context Manager falhou
Inicialização do Satellite Session Manager falhou
Eventos do sistema
- Abra Windows Visualizador de Eventos e procure no registo de Eventos do Sistema mensagens que incluam a cadeia Launchpad.
- Abra o ficheiro ExtLaunchErrorlog e procure a cadeia ErrorCode. Revê a mensagem associada ao Código de Erro.
Por exemplo, as seguintes mensagens são erros comuns do sistema relacionados com o framework de extensibilidade do SQL Server:
O serviço SQL Server Launchpad (MSSQLSERVER) falhou em iniciar devido ao seguinte erro: <texto>
O serviço não respondeu atempadamente ao pedido de arranque ou controlo.
Foi atingido um tempo limite (120000 milissegundos) enquanto se espera que o serviço SQL Server Launchpad (MSSQLSERVER) se ligasse.
Despejar arquivos
Se tiver conhecimentos de depuração, pode usar os ficheiros de dump para analisar uma falha no Launchpad.
- Localiza a pasta que contém os registos de configuração do bootstrap para o SQL Server. Por exemplo, no SQL Server 2016, o caminho padrão era C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log.
- Abre a subpasta de logs do bootstrap que é específica para extensibilidade.
- Se precisar de submeter um pedido de suporte, adicione todo o conteúdo desta pasta a um ficheiro comprimido. Por exemplo, C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\LOG\ExtensibilityLog.
A localização exata pode variar no seu sistema, e pode ser num disco diferente do seu disco C. Certifica-te de obter os registos da instância onde o machine learning está instalado.
Definições de configuração
Esta secção lista componentes ou fornecedores adicionais que podem ser fonte de erros quando executa scripts R ou Python.
Que protocolos de rede estão disponíveis?
Os Machine Learning Services requerem os seguintes protocolos de rede para comunicação interna entre componentes de extensibilidade e para comunicação com clientes externos de R ou Python.
- Canalizações nomeadas
- TCP/IP
Abra o Gestor de Configuração do SQL Server para determinar se um protocolo está instalado e, se estiver instalado, para determinar se está ativado.
Configuração de segurança e permissões
Para contas de trabalhadores:
- No Painel de Controlo, abra Users and Groups e localize o grupo usado para executar trabalhos de script externos. Por defeito, o grupo é SQLRUserGroup.
- Verifique se o grupo existe e que contém pelo menos uma conta de trabalhador.
- No SQL Server Management Studio, selecione a instância onde serão executados trabalhos em R ou Python, selecione Segurança e depois determine se existe um login para o SQLRUserGroup.
- Revise as permissões do grupo de utilizadores.
Para contas individuais de utilizador:
Determine se a instância suporta autenticação em Modo Misto, apenas logins SQL ou apenas Windows authentication. Esta definição afeta os requisitos de código em R ou Python.
Para cada utilizador que precise de executar código R, determine o nível necessário de permissões em cada base de dados onde os objetos serão escritos a partir de R, os dados serão acedidos ou os objetos serão criados.
Para permitir a execução de scripts, crie papéis ou adicione utilizadores aos seguintes papéis, conforme necessário:
- Exceto db_owner: Exigir EXECUTAR QUALQUER SCRIPT EXTERNO.
- db_datawriter: Escrever resultados a partir de R ou Python.
- db_ddladmin: Para criar novos objetos.
- db_datareader: Para ler dados usados pelo código R ou Python.
Tome nota de se alterou alguma conta de arranque por defeito quando instalou o SQL Server 2016.
Se um utilizador precisar de instalar novos pacotes R ou usar pacotes R instalados por outros utilizadores, pode ser necessário ativar a gestão de pacotes na instância e depois atribuir permissões adicionais.
Que pastas estão sujeitas a bloqueio por software antivírus?
O software antivírus pode bloquear pastas, o que impede tanto a configuração das funcionalidades de aprendizagem automática como a execução bem-sucedida dos scripts. Determine se alguma pasta na árvore do SQL Server está sujeita a varredura de vírus.
No entanto, quando múltiplos serviços ou funcionalidades são instalados numa instância, pode ser difícil enumerar todas as pastas possíveis que a instância utiliza. Por exemplo, quando são adicionadas novas funcionalidades, as novas pastas devem ser identificadas e excluídas.
Além disso, algumas funcionalidades criam novas pastas dinamicamente em tempo de execução. Por exemplo, tabelas OLTP em memória, procedimentos armazenados e funções criam todos novos diretórios em tempo de execução. Estes nomes de pastas frequentemente contêm GUIDs e não podem ser previstos. O SQL Server Trusted Launchpad cria novos diretórios de trabalho para trabalhos de scripts em R e Python.
Como pode não ser possível excluir todas as pastas necessárias pelo processo do SQL Server e pelas suas funcionalidades, recomendamos que exclua toda a árvore de diretórios de instâncias do SQL Server.
O firewall está aberto para o SQL Server? A instância suporta ligações remotas?
Para determinar se o SQL Server suporta ligações remotas, veja Configurar ligações de servidores remotos.
Determine se foi criada uma regra de firewall para o SQL Server. Por razões de segurança, numa instalação por defeito, pode não ser possível que um cliente remoto em R ou Python se ligue à instância. Para mais informações, consulte Resolução de Problemas ao Ligar ao SQL Server.