Automaticky generované dotazy na DB [Vyřešeno]

fikusir
Člen | 27
+
0
-

Ahoj,

řeším performance problém s aplikací, která pracuje s MSSQL. V presenteru, který to obsluhuje nenacházím žádnou smyčku a SQL dotazy přímo v MSSQL jsou zpracovány v řádu nižší milisekund.

Na Development instanci s ostrými daty jsem si ale všiml, že mi nette generuje stovku+ dotazů na všechny tabulky v DB.

Screenshot

Nemohl by mi někdo objasnit, co by to mohlo způsobovat?

Zajímavé pro mě je, že pod každým dotazem je zmíněněn \WorkplaceManager.php, který je jen jeden z mnoha Modelů v tomto Presenteru. Sám o sobě je jednoduchý.

<?php
namespace App\Modules\Productionplan\Models;

use Nette\Database;

class WorkplaceManager
{
	private Database\Explorer $database;

	/**
	 * Constructor
	 * @param  Database\Explorer  $database
	 */
	public function __construct(Database\Explorer $database)
	{
		$this->database = $database;
	}

	/**
	 * Return all rows which are not set to be displayed on Requests pages
	 * @return Database\Table\Selection
	 */
	public function getAll(): Database\Table\Selection
	{
		return $this->database->table('ppworkplace')->order('ordering');
	}

	/**
	 * Return all rows which are not set to be displayed on Requests pages
	 * @return Database\ResultSet
	 */
	public function getAllResult(): Database\ResultSet
	{
		return $this->database->query('SELECT * FROM ppworkplace ORDER BY ordering');
	}

	/**
	 * Return all rows which are set to be displayed on Requests pages
	 * @return Database\Table\Selection
	 */
	public function getAllForRequests(): Database\Table\Selection
	{
		return $this->database->table('ppworkplace')->where('showInRequests',true)->order('ordering');
	}

	/**
	 * Return all rows which are set to be suitable for Release from Instruction page
	 * @return Database\Table\Selection
	 */
	public function getReleaseSuitable(): Database\Table\Selection
	{
		return $this->database->table('ppworkplace')->where('asInstruction',true)->order('ordering');
	}

	/**
	 * Return single Workplace
	 * @param  Int  $id
	 * @return Database\Table\ActiveRow|null
	 */
	public function get(Int $id): Database\Table\ActiveRow|null
	{
		return $this->database->table('ppworkplace')->get($id);
	}

}

Moc děkuju za pomoc, Michal

Editoval fikusir (29. 8. 14:10)

nightfish
Člen | 516
+
+3
-

@fikusir

  1. Odkaz na screenshot, který jsi poslal, není bez přihlášení (do Sharepointu?) přístupný.
  2. Uvedené dotazy jsou to, že si Nette\Database (NDB) osahá při prvním přístupu k databázi strukturu tabulek a vazeb mezi nimi, aby pak fungovala magie NDB. Tyto informace se cachují, tzn. na produkci se (obvykle) provedou jen při prvním spuštění aplikace po deployi. Na develu může být cache vypnutá.

Kód, zodpovědný za načtení struktury databáze najdeš v https://github.com/…tructure.php

fikusir
Člen | 27
+
0
-

Ahoj, odkaz jsem opravil, ale už to nebude potřeba. Navedl jsi mě správnou cestou na cache a po zapnutí laděnky na produkci jsem hned i objevil zádrhel v dotazu. Moc díky, máš to u mě. Michal

nightfish napsal(a):

@fikusir

  1. Odkaz na screenshot, který jsi poslal, není bez přihlášení (do Sharepointu?) přístupný.
  2. Uvedené dotazy jsou to, že si Nette\Database (NDB) osahá při prvním přístupu k databázi strukturu tabulek a vazeb mezi nimi, aby pak fungovala magie NDB. Tyto informace se cachují, tzn. na produkci se (obvykle) provedou jen při prvním spuštění aplikace po deployi. Na develu může být cache vypnutá.

Kód, zodpovědný za načtení struktury databáze najdeš v https://github.com/…tructure.php