sql >> Databáze >  >> RDS >> Sqlserver

Proč dotaz Microsoft SQL Server 2012 trvá několik minut oproti JDBC 4.0, ale sekundy v Management Studio?

Adaptivní vyrovnávací paměť je dobrá odpověď. Také bych doporučil zkontrolovat SET připojení možnosti prostřednictvím SQL Server Profiler.

Když zahájíte trasování, ujistěte se, že ExistingConnections je vybráno. Porovnejte SPID z připojení JDBC a připojení SSMS. ARITHABORT přichází na mysl jako jeden, který jsem viděl způsobit rozdíl ve výkonu mezi ovladačem SSMS a JDBC. Microsoft to krátce zmiňuje zde:http://msdn.microsoft.com/en-us/library/ms190306.aspx. Informace o Stack Exchange zde:https://dba.stackexchange.com/questions/9840/why-would-set-arithabort-on-dramatically-speed-up-a-query

Na Oracle jsem viděl obrovský dopad hraním s setFetchSize metoda na Statement / PreparedStatement objekt. Ovladač SQL Server zjevně nepodporuje tuto metodu. V ovladači na to však existuje interní metoda. Podrobnosti najdete v části Nastavení výchozího přednačítání řádků v SQL Server pomocí ovladače JDBC.

Také, co děláte ve svém while (rs.next()) smyčka? Zkuste nedělat nic jiného, ​​než číst sloupec, například rs.getInt(1) . Podívejte se, co se stane. Pokud letí, znamená to, že úzké místo je ve vašem předchozím zpracování sady výsledků. Pokud je stále pomalý, problém musí být v ovladači nebo databázi.

Můžete použít SQL Server Profiler k porovnání spouštění tak, jak přicházejí přes JDBC a jak jej spouštíte přes SSMS. Porovnejte CPU, čtení, zápis a dobu trvání. Pokud se liší, pak je plán provádění pravděpodobně odlišný, což mě ukazuje zpět na první věc, kterou jsem zmínil:SET možnosti.



  1. Stanovení a identifikace cílů řádků v prováděcích plánech

  2. Funkce MySQL POW() – Zvyšte hodnotu na sílu jiné hodnoty

  3. Automatická oprava plánu v SQL Server

  4. 3 způsoby, jak najít pozici podřetězce v řetězci v MySQL