Consultar en tiempo real los datos de una base de datos SQL repentino problema de latencia

StackOverflow https://stackoverflow.com/questions/872400

  •  22-08-2019
  •  | 
  •  

Pregunta

Estamos probando una aplicación que se supone que para mostrar datos en tiempo real para varios usuarios en un 1 segundo.Nuevos datos de 128 filas se inserta cada segundo por la aplicación de servidor en un SQL datatbase entonces tiene que ser consultada por todos los usuarios junto con otro viejo referencial 128 filas.

Hemos probado el momento de la consulta y no exceder de 30 milliseonds;también la interfaz de la función que invoca la consulta no tome más de 50 milisegundos con el procesamiento de los datos y todos los

Hemos desarrollado una aplicación de pruebas que crea un hilo y una conexión de SQL por cada usuario.Los problemas del usuario 7 consultas cada 1 segundo.Todo lo que empieza bien, y el usuario no tiene más de 300 milisegundos para el 7 de serie de datos ( consultas ).Sin embargo, después de 10 minutos, el tiempo de latencia superior a 1 segundo y sigue aumentando.No sabemos si el problema es de SQL server 2008 manejo de múltiples solicitudes al mismo tiempo, y de cómo superar un problema.

He aquí nuestra prueba de cliente si es de ayuda.Tenga en cuenta que el cliente y el servidor se realizan en el mismo 8 de la CPU de la máquina con 8 GB de RAM.Ahora estamos cuestionando si la base de datos podría no ser la solución óptima para nosotros.

   class Program
{
    static void Main(string[] args)
    {   
        Console.WriteLine("Enter  Number of threads");
        int threads = int.Parse(Console.ReadLine());
        ArrayList l = new ArrayList();
        for (int i = 0; i < threads; i++)
        {
            User u = new User();
            Thread th = new Thread(u.Start);
            th.IsBackground = true;
            th.Start();
            l.Add(u);
            l.Add(th);
        }
        Thread.CurrentThread.Join();
        GC.KeepAlive(l);
    }
}
class User
{
    BusinessServer client ; // the data base interface dll
    public static int usernumber =0 ;

    static TextWriter log;
    public User()
    {
        client = new BusinessServer(); // creates an SQL connection in the constructor
        Interlocked.Increment(ref usernumber);
    }

    public static void SetLog(int processnumber)
    {
        log = TextWriter.Synchronized(new StreamWriter(processnumber + ".txt"));
    }
    public void Start()
    {
        Dictionary<short, symbolStruct> companiesdic = client.getSymbolData();
        short [] symbolids=companiesdic.Keys.ToArray();
        Stopwatch sw = new Stopwatch();
        while (true)
        {

            int current;
            sw.Start();
            current = client.getMaxCurrentBarTime();
            for (int j = 0; j < 7; j++)
            {   
                client.getValueAverage(dataType.mv, symbolids,
                    action.Add, actionType.Buy,
                    calculationType.type1,
                    weightType.freeFloatingShares, null, 10, current, functionBehaviour.difference); // this is the function that has the queries

            }
            sw.Stop();
            Console.WriteLine(DateTime.Now.ToString("hh:mm:ss") + "\t" + sw.ElapsedMilliseconds);
            if (sw.ElapsedMilliseconds > 1000)
            {
                Console.WriteLine("warning");
            }
            sw.Reset();

            long diff = 0;//(1000 - sw.ElapsedMilliseconds);
            long sleep = diff > 0 ? diff : 1000;
            Thread.Sleep((int)sleep);
        }
    }



}
¿Fue útil?

Solución

sospecharía la propia consulta. Si bien no puede tardar mucho tiempo en una base de datos vacía, ya que la cantidad de datos crece se puede requerir más tiempo, dependiendo de cómo se hace la mirada hacia arriba. ¿Ha examinado el plan de consulta para asegurarse de que está haciendo las búsquedas de índice en lugar de escaneos de tabla para encontrar los datos? Si no es así, tal vez la introducción de algunos índices ayudarían.

Otros consejos

Advertencia:esta respuesta se basa en el conocimiento de MSSQL 2000 - no se si es correcta.

Si usted hace un montón de inserciones, los índices de conseguir finalmente fuera de la fecha y el servidor cambiará automáticamente a la mesa de exploraciones hasta que los índices se vuelven a generar.Algo de esto se hace automáticamente, pero es posible que desee forzar a indexar periódicamente si este tipo de actuación es fundamental.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top