Wydjność bazy danych

Witam.

Jakie ustawienie odnośnie cache’owania powinny być ustawione przy połączeniu z MySQL.

Czy ustawienie cache’owania schematu


 'schemaCachingDuration'=>3600,

jest wystarczające i w jaki sposób mogę sprawdzić efekt włączenia tego?

Napotkałem jeszcze 2 parametry do ustawienia:




'enableProfiling' => true,

'enableParamLogging' => true,



oraz




'cache'=>array(

          'class'=>'system.caching.CFileCache',

          'cachePath'=>'cache',

          'directoryLevel'=>1

),



Witaj,


'cache'=>array(

          'class'=>'system.caching.CFileCache',

          'cachePath'=>'cache',

          'directoryLevel'=>1

),

Tutaj ustalasz klasę cachującą i sposób cachowania.

W tym przypadku pamięć podręczna będzie zapisywana do pliku.

Jest kilka innych klas APC, MemCache, DbCache (domyślnie zapisuje do bazy sqlite3).

APC i MemCache wymagają ustawienia serwera (na większości hostingów nie ma takiej opcji).


'schemaCachingDuration'=>3600,

Powoduje cachowanie schematu tabel. Za każdym razem jak tworzysz nowy aktywny rekord danego rodzaju

to najpierw pobierana jest informacja jak zbudowana jest tabela (jakie ma pola, jakie rodzaje pól).

Jeżeli masz ustawiony cache z 1. pkt. to wtedy tam zapiszą się informacje o budowie i będą pobierane z tamtąd.

Należy uważać: gdy zmienisz coś w bazie danych (np. dodasz nowe pole) to należy wyczyścić pamięć podręczną.

Zresztą możesz to sprawdzić za pomocą rozszerzenia z pkt. 4 :slight_smile:


'enableProfiling' => true,

'enableParamLogging' => true,

Te dwa parametry powinny być wyłączone na serwerze produkcyjnym.

Np. pierwszy z nich powoduje liczenie jak długo dane zapytanie się wykonywało.

Potrzebne w fazie testów i pracy nad aplikacją, a potem można wyłączyć.

  1. Do testowania szybkości działania zapytań SQL polecam to rozszerzenie:

http://www.yiiframework.com/extension/yii-debug-toolbar/

Oprócz tego zawiera wiele innych informacji takich jak: zmienne globalne, użycie pamięci podczas działania skryptu itd.

Pozdrawiam Mariusz

debug-toolbar jest faktycznie dobrym narzędziem, ale jeżeli potrzebujesz coś na szybko to wystarczy CWebLogRoute. Pamiętaj także, że przedwczesna optymalizacja jest zła. Sprawdź czy Twoja aplikacja faktycznie ma jakieś wyraźnie wolniejsze fragmenty, potem sprawdź czy te fragmenty mają w ogóle jakieś znaczenie. Jeżeli mimo wolniejszych miejsc, serwer jest w stanie obsłużyć np. 5000 zapytań na minute, a nie przewidujesz ich więcej jak 1000, to nie masz co tracić czasu na cachowanie i inne bajery. Jak liczba zapytań zacznie się zbliżać do limitu, to wtedy możesz podziałać.

Dopiszę się do wątku, nie działa mi cache zapytań.


Yii::app()->db->queryCacheID

zwraca "cache"


Institution::model()->cache(6000)->findAll($criteria);

mimo to, wywołanie tego kodu zawsze wysyła query do MYSQL’a - dlaczego? O czym zapomniałem/nie wiem?

$criteria nie wyszukuje po polach typu BLOB.

Wysłane zapytanie do serwera db to np:


SELECT `id`, `name`, `city` FROM `institution` `t` WHERE `name` LIKE '%kasp%' LIMIT 10

EDIT

To był głupi błąd, źle skonfigurowałem klasę cache w main.php


'cache'=>array(

    'class'=>'system.caching.CApcCache',

),