¿Los controladores sqlsrv son lentos en codeigniter?

He instalado la última versión de CI 2.1.3

Ahora, después de ejecutar una consulta, obtengo un tiempo de respuesta muy lento para algo muy simple como:

function Bash(){


    $sql = “SELECT * FROM Contacts”;
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
  die( print_r( sqlsrv_errors(), true) );
}

después de consultar una base de datos remota. (Servidor SQL 2008)

Cuando ejecuto esta misma consulta en un simple script PHP en la misma base de datos remota. Obtengo resultados al instante.

a) ¿Alguien más ha experimentado este problema con los controladores sqlsrv en codeigniter?

Si es así, ¿cómo lo resolviste?

Aquí está mi cadena de conexión:

$db['default']['hostname'] = "xxxxx,1433";
$db['default']['username'] = "xx";
$db['default']['password'] = "xxxxxx-xx";
$db['default']['database'] = "xxxxxxxxx";
$db['default']['dbdriver'] = "sqlsrv";
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = TRUE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

ACTUALIZAR:

He encontrado lo siguiente de ejecutar el generador de perfiles.

BASE DE DATOS: base de datos CONSULTAS: 1 (Ocultar) 0.0659 select * from Contacts

Tiempo de carga: Clases base 0.0428 Tiempo de ejecución del controlador (Bienvenido / AzureBash) 58.2173 Tiempo total de ejecución 58.2602

Parece que la consulta se está ejecutando en 0.06 segundos, pero el controlador se está demorando un minuto en cargarse.

No tengo idea de por qué esto está sucediendo.

Solución

La interfaz de registros activos para los últimos controladores SQLSRV está defectuosa.

Entonces, descargue y sobrescriba la interfaz existente con estos (sobrescriba su carpeta sqlsrv en la carpeta de la base de datos en el CI):

http://www.kaweb.co.uk/blog/mssql-server-2005-and-codeigniter/

Nota: Estos han sido probados con SQL Azure y funciona.

$ consulta-> num_rows (); no funciona con estos controladores, por lo que te sugiero que uses el conteo. O crea tu propia envoltura.

Además, la fecha ahora es un tipo de objeto de fecha en su conjunto de resultados.

Espero que esto ayude.

Solucion 2

Si por alguna razón encuentra un error que lo hace completamente inutilizable. Vuelva a la interfaz sqlsrv originalmente proporcionada. Encontrará que lo que está causando el problema es la forma en que la interfaz original está ejecutando la consulta, por lo tanto, cree una clase de ayudante de base de datos; use $ sql = $ this-> db-> last_query (); para obtener la consulta que estaba a punto de ejecutar y luego, dentro de la clase database_helper, ejecútela usted mismo:

function MakeDbCall ($sql)
{
$serverName = "xxxxx-xxxx-xxx,1433"; //serverName\instanceName
$connectionInfo = array( "Database"=>"xxx", "UID"=>"xx", "PWD"=>"xxxxx","ConnectionPooling" => "1");



 $conn = sqlsrv_connect($serverName,$connectionInfo);
 $stmt = sqlsrv_query($conn, $sql);

 while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
      $result_array[] = $row;
}

return $result_array;

}

Crea uno para row_array.

Debería poder llamar a esta función directamente, desde cualquier lugar en su aplicación. Mientras aprovechas la forma en que active_records construye tu consulta.

No es una solución ideal, pero hasta que codeigniter ordene su clase SQLSRV, no hay mucho que podamos hacer.

Respuestas a la pregunta(5)

Su respuesta a la pregunta