DeadlineExceededError при свързване с Google Cloud SQL

Имаме приложение на google app engine, свързано с GCSQL, и имаме много проблеми с DeadlineExceededError, докато се опитваме да свържем базата данни. Грешката изглежда се дължи на голям брой потребители, отварящи приложението за кратък период от време. Когато потърсим отварящите се връзки на таблото за управление през това време, няма повече от 45 отворени връзки едновременно и се проваля при голям процент от заявките (четене, писане и свързване), което отнема твърде много време за изпълнение то. В резултат на това прекарано време услугата се изключва и получаваме грешката.

Пример за грешка:

Traceback (most recent call last):
  File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 223, in Handle
    result = handler(dict(self._environ), self._StartResponse)
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~ono-hat-prod/1.365115032772094991/onohatpreprod.py", line 5541, in post
    cursor.execute("SELECT %s FROM actuaciones WHERE numero = '%s' " % (rc,idHat))
  File "/python27_runtime/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 499, in execute
    self._DoExec(request)
  File "/python27_runtime/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 375, in _DoExec
    response = self._conn.MakeRequest('Exec', request)
  File "/python27_runtime/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 873, in MakeRequest
    response = self._MakeRetriableRequest(stub_method, request)
  File "/python27_runtime/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py", line 897, in _MakeRetriableRequest
    response = self.MakeRequestImpl(stub_method, request)
  File "/python27_runtime/python27_lib/versions/1/google/storage/speckle/python/api/rdbms_apiproxy.py", line 67, in MakeRequestImpl
    except apiproxy_errors.ApplicationError, e:
 DeadlineExceededError

Част от кода до появата на грешката:

class detalleActuacion(webapp2.RequestHandler):
    def post(self):
        idHat = self.request.get('id')
        logging.info(idHat)
        num_conexiones = 0
        num_cierres = 0
        conn = rdbms.connect(instance=_INSTANCE_NAME, database='Actuaciones')
        num_conexiones = num_conexiones + 1
        cursor = conn.cursor()

        dict_act = {}
        request_cad = 'solucionado,duracion,numero,fecha_inicio_ventana,fecha_fin_ventana,'
        request_cad = request_cad+'tipo,titulo,tipo_cliente,ubicacion,zona_regional,'
        request_cad = request_cad+'zona_local,ciudad_ticket,zona_regional_subticket,zona_local_subticket,'
        request_cad = request_cad+'zona_local_ticket,skill,num_recursos,num_actuaciones,ubi_emplaz,'
        request_cad = request_cad+'ubi_provincia,ubi_lat,ubi_long,ubi_via,ubi_calle,ubi_numero,ubi_adic,'
        request_cad = request_cad+'ubi_CP,miga_terminal,miga_tlf,miga_dir,severidad,prioridad,serv_CATV,'
        request_cad = request_cad+'serv_datos,serv_DTV,serv_empresa,serv_telefonia,instr,num_rep,'
        rc = request_cad+'fecha_creac,fecha_creac_tp,fecha_sol,fecha_sol_tp,fecha_cierre,fecha_cierre_tp,'
        rc = rc+'fecha_inicio,fecha_fin,descr_adic,descr_log,grupo_pos,accion,cola,estado,estado_ticket,'
        rc=rc+'doc_adj,detalle_equipos,tarea,subtarea,subzona,TIR,elem_red,descripcion,num_afectados,'
        rc=rc+'repeticion,fecha_repeticion,dias_repeticion,dias_semana,fin_repeticion,cl_afectados,'
        rc=rc+'plan_tp,marca_seguimiento,tipificacion,miga,zona,bandeja,alerta,descr_log1,descr_log2,descr_log3,descr_log4,descr_log5,descr_log6,descr_log7,descr_log8,descr_log9,'
        rc=rc+'elem_red_2,estado_CRM,tecnico,tecnico2,tecnico3,tecnico4,tecnico5,num_asignaciones,ultima_modificacion,tiempo_proceso,fecha_inicio_real,fecha_fin_real'
        rc=rc+',observaciones1,observaciones2,observaciones3,observaciones4,observaciones5,observaciones6,observaciones7,observaciones8,observaciones9,observaciones10'
        cursor = conn.cursor()
        cursor.execute("SELECT %s FROM actuaciones WHERE numero = '%s' " % (rc,idHat))

Благодаря ви предварително за съдействието.


person user2054223    schedule 08.02.2013    source източник


Отговори (1)


Ако има 45 едновременни заявки, може да има много повече отворени връзки. Вижте Какви са ограниченията на връзката за Google Cloud SQL от App Engine и как най-добре да използвате повторно връзките с DB?

Можете също така да опитате да увеличите размера на екземпляра: повече RAM може да намали забавянето на всяка заявка и така да намали броя на връзките.

person Joe Faith    schedule 13.02.2013