To teraz o utrzymaniu bazy sql - gotowa procedura robiąca to:

Here’s a very simple stored procedure I use to run some maintenance on MySQL tables. It allows you to run OPTIMIZE TABLE or ANALYZE TABLE on all (or most) tables in a MySQL database.

Wypada napisać, że jeszcze jej nie odpalałem:)

Wklejam, bo zastanawiałem się, czy nie stworzyć takiego czegoś samemu. Jak widać - nie ma po co. Trochę ją tylko
@RomantycznyRoman: Zawsze można dłuższy czas ustawić. Zapytanie o statystyki tabel jest na pewno jednym z prostszych i wykonuje się niemal błyskawicznie więc nie powinno być jakimś strasznym obciążeniem sprawdzanie tego. Jak już będziemy oszczędzać na takich rzeczach to pewnie następnym krokiem będzie wyłączenie pk i fk
@plushy: No właśnie sądzę, że nie. Nie ma - według mnie - sensu jakiekolwiek zbędne obciążanie (jakiekolwiek) bazy produkcyjnej w momencie sieczki generowanej przez userów. I sądzę, że można zrezygnować z analizowania w tym czasie . Ale to oczywiście kwestia priorytetów i dokładnych zadań, jakie przed tą bazą stoją (liczby requestów, etc.)
No to wrzucam pierwszego kejsa - poniżej skrypt procedury

CREATE PROCEDURE

Add_new_XX
(IN YY varchar(2))

BEGIN

set@s =

concat('CREATE TABLE Test',YY,

'(

Column1
varchar(5) DEFAULT NULL,

Column2
varchar(5) DEFAULT NULL,

Column3
varchar(50) DEFAULT NULL,

Column4
decimal(10,7) DEFAULT NULL,

Column5
decimal(10,7) DEFAULT NULL,

Column6
varchar(5) DEFAULT NULL,

Column7
varchar(5) DEFAULT NULL,

Column8
varchar(50) DEFAULT NULL,

Column9
decimal(10,7) DEFAULT NULL,

Column10
decimal(10,7) DEFAULT NULL,

Column11
timestamp NULL DEFAULT NULL,

KEY Column1',YY,' (

Column1
O obu rzeczach.

1. Masz procedurę (sp)

2. Masz w niej ds (dynamic sql)

3. Wywołujesz procedurę

4. Procedura wykonuje składa i wykonuje ds, które ma w środku. Nie zwykły skrypt, tylko właśnie ds.

Chyba się jakoś ostro rozminęliśmy:) i chyba robi się za późno na myślenie.

Tu jest przykład z mssql - to co poniżej jest w procedurze.

DECLARE @sql VarChar(2000)

DECLARE @table VarChar(100)

SET @table = 'Monkeys'

SET @sql =
#webdev #programowanie #sql #pytanie

jak sensownie zaprojektować bazę danych pod system tagów co jest np. na wypoku? coś na zasadzie, że idowi posta podporządkowane jest kilka idów tagów, tylko, że musiałby by być w osobnych kolumnach żeby był potem jakiś sens przeszukiwać pod tym kątem. no ale jakoś dorabianie nowych kolumn mi się nie widzi. najprościej by było założyć sztywną liczbę np. max 10 tagów na post, ale to też nie jest
Jako że przeniosłem już cały interes na VPSa, to wrzutka o administracji mysqlem

Shrink database w mysql.

http://dba.stackexchange.com/questions/24942/how-do-i-shrink-the-innodb-file-ibdata1-without-dumping-all-databases

http://stackoverflow.com/questions/3456159/how-to-shrink-purge-ibdata1-file-in-mysql

I bonus - sysvarinnodbfilepertable (od wersji 5.6.6 domyślnie włączone - wersję można sprawdzić tak: select version())

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_file_per_table

#romanisql #programowanie #sql
To jeszcze opis zmiennej thread_stack, która mi wczoraj dała do zrozumienia, że wypada ją ustawić;)

http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_thread_stack

http://technical-qa.blogspot.com/2010/12/mysql-problem-thread-stack-overrun.html - i wpis o tym, gdzie ją ustawić. Ja zrobiłem to z poziomu Workbencha - z poziomu sql dostawałem info, że zmienna jest tylko do odczytu:)

#romanisql #programowanie #sql
@anonim1133: Jest ustawiona domyślnie z parametrami: 192KB (256KB for 64-bit systems), a to za mało na odpalenie procedury mega procedury, którą napisałem do wygenerowania danych - po około 40 iteracjach dostawałem error thread stack overrun (błąd skutkuje przerwaniem wykonywania zapytania) . Ustawiłem wartość czterokrotnie większą niż domyślna (wychodząc z założenia, że mogę sobie na to pozwolić w trakcie prac na instancji testowej - na produkcji zoptymalizowałbym procedurę.). Co ważne sama wartość
Na razie robię sobie i ładuję strukturę głównej tabeli bazy, którą bez przerwy będzie męczył klient. Testy wydajnościowe wykonam na 100K rekordów i jak mi przez przypadek wyjdzie, że w moim zastosowaniu data w int jest wolniejsza - to dam wam znać (swoją drogą ciekawy task).

Jak już przy optymalizacji jesteśmy, będę testował wydajność zapytań z cache i bez cache (a nie jest to wcale ewidentne). Na rozgrzewkę wrzucam kilka linków na
Siema! Siedzę teraz nad dość konkretną optymalizacją SQLową (mysql) i jeszcze przez kilka dni będę dłubał w kilometrach procedur... W związku z tym będę też przerzucał internet w każdą możliwą stronę. Czy wrzucać tu od czasu do czasu jakieś linki do ciekawych informacji, tematów optymalizacyjnych, etc.? Warto? Ktoś to będzie czytał?

#sql #mysql #programowanie #romanisql
@Pies_: @plkwykop: @piowit: @relik39: @anonim1133: @Wiceps: @Arvangen: @eDameXxX: @Arvangen : @Suchy_

Ok - to zrobimy tak - będę operował sobie tagiem #romanisql .

Co robię?

Background:

Przygotowuję aplikację X, w której odpowiadam za część bazodanową. Moja robota jest dwuaspektowa:

1. etele - całość ładowania danych z przeróżnych źródeł (w tym własnych:)), agregowanie danych, etc. Struktura relacyjnej bazy, którą ładuję ma - w pierwszym etapie
#sql #wydajnosc #mysql #mssql #programowanie #informatyka #aqwarttolewak

Pracuję obecnie na bazie danych SQL postawionej na zwykłym komputerze z windowsem. W jaki sposób mogę zmierzyć wydajność tego komputera? Potrzebuję wykonywać proste zapytania (bez skomplikowanych obliczeń), ale bardzo często (na tyle często, na ile tylko sprzęt mi pozwoli). I teraz w jaki sposób określić,że nie mogę zwiększyć częstotliwości odpytywania? Obciążenie CPU? Zajętość RAMu? Operacje na HDD? Co może być jako pierwsze wąskim gardłem? I