Слава нації
#StandWithUkraine

Роман Теличко

Блог з програмування, оптимізації та адміністрування систем

PostgreSQL. Храним таблицу в оперативной памяти (RAM)

// 7 Листопада, 2013 | 7136 переглядів

Несмотря на то что PostgreSQL является довольно мощной базой данных, в ней отсутствует полноценная поддержка хранения таблиц в оперативной памяти.
Ниже я расскажу как заставить PostgreSQL хранить выбранные таблицы в оперативной памяти для быстрых операций с ними.
Всё будет происходить в Debian.

Создадим пустую папку для монтирования

mkdir /mnt/ramfs

И смонтируем в неё ramfs

mount -t ramfs none /mnt/ramfs

Создадим папку для PostgreSQL и назначим на неё права.

mkdir /mnt/ramfs/pgdata
chown postgres:postgres /mnt/ramfs/pgdata
chmod 600 /mnt/ramfs/pgdata

Далее зайдём под суперпользователем базы данных PostgreSQL – postgres

su postgres
psql

И создадим новый TABLESPACE, размещение которого мы укажим в папке с смонтированной ramfs

postgres=# CREATE TABLESPACE ram LOCATION '/mnt/ramfs/pgdata';

Выдадим права на работу с этом TABLESPACE нашему пользователю (например myuser)

postgres=# GRANT CREATE ON TABLESPACE ram TO myuser;

Теперь нам осталось только создать новую таблицу и указать при её создании TABLESPACE ram.
Например:

CREATE TABLE mytesttable (
    begin_ip ip4 NOT NULL,
    end_ip ip4 NOT NULL,
    begin_num bigint NOT NULL,
    end_num bigint NOT NULL,
    country_code character(2) NOT NULL,
    country_name character varying(255) NOT NULL,
    ip_range ip4r
)
TABLESPACE ram;

Теперь PostgreSQL будет работать с этой таблицей как и с другими даже не подозревая что она “лежит” в ОЗУ.

Это всё.
Удачи.

PostgreSQL. 10 продвинутых команд для DBA с примерами

// 25 Жовтня, 2013 | 66465 переглядів

Топ 10 самих популярных команд для управления сервером PostgreSQL для настоящих администраторов баз данных (DBA).
Большинство команд подходят как для консольной утилиты psql, так и для запуска через ваш клиент.

  1. Как найти самую большую таблицу в базе данных PostgreSQL?
  2. Как узнать размер всей базы данных PostgreSQL?
  3. Как узнать размер таблицы в базе данных PostgreSQL?
  4. Как узнать текущую версию сервера PostgreSQL?
  5. Как выполнить SQL-файл в PostgreSQL?
  6. Как отобразить список всех баз данных сервера PostgreSQL?
  7. Как отобразить список всех таблиц в базе данных PostgreSQL?
  8. Как показать структуру, индексы и прочие элементы выбранной таблицы в PostgreSQL?
  9. Как отобразить время выполнения запроса в консольной утилите PostgreSQL?
  10. Как отобразить все команды консольной утилиты PostgreSQL?

Читати далі…

Настройка связки nginx + SVN/Subversion + trac (без Apache)

// 30 Вересня, 2013 | 6860 переглядів

Сегодня я расскажу как можно отказаться от медленного Apache для настройки связки trac + SVN/Subversion. Итак, начнём.

1. Устанавливаем и настраиваем SVN/Subversion

Ставим SVN/Subversion на наш сервер

sudo apt-get install subversion

Создаём репозиторий (для примера — в папке /var/svn/my-repository)

sudo svnadmin create /var/svn/my-repository

Устанавливаем владельца www-data для папки с репозиторием

sudo chown -R www-data:www-data /var/svn/my-repository

Теперь нам необходимо выполнить импорт файлов в репозиторий.
Для этого создадим где-то на локальной машинке (впрочем, можно и прямо на удалённом сервере) папку с некоторым именем (для примера: my-files)

mkdir my-files

И выполняем первый импорт на наш настроенный SVN-сервер:

svn import -m 'initial commit' my-files svn+ssh://my-username@my-cool-webserver/var/svn/my-repository

Где
  my-files – папка с файлами которые необходимо проимпортировать в репозиторий,
  my-username – имя пользователя на сервере,
  my-cool-webserver – адрес сервера,
  /var/svn/my-repository – путь в файловой системе сервера к репозитории

Теперь мы можем выполнять коммиты в этот репозиторий, только вначале необходимо будет сделать checkout репозитория в папку для дальнейшей работы.
Делается это так:

svn checkout svn+ssh://my-username@my-cool-webserver/var/svn/my-repository

Данный способ настройки SVN/Subversion называется SVN over SSH.
Читати далі…

WordPress: AJAX Hits Counter и мои первые 10.000 скачиваний

// 9 Вересня, 2013 | 1114 переглядів

Идея плагина родилась в августе 2012, когда возникла необходимость вывода популярных записей блога с последующим кэшированием как самого виджета, так и скрипта добавления "+1" просмотрам.

Произведя ресёрч по существующим плагинам, я понял что аналогов с таким функционалом ну просто нет. В основном всё считается запуском какой-то php-функции плагина, что конечно же не будет работать при кэшировании страниц nginx’ом (когда до PHP дело вообще не доходит).

Выходом из этой ситуации был только AJAX-скрипт, что вызывался бы при отображении поста с рандомными параметрами для исключения возможности кэширования по URL. Также это будет означать, что спам-боты, поисковые роботы и прочие без-JavaScript-овые клиенты учитываться не будут, что предполагает более точную статистику.

Опыта написаний плагинов для WordPress к тому времени у меня вообще не было, но я решил его сделать. Это было немного больше чем год назад.
Читати далі…

Как узнать температуру и нагрузку видеокарты ATI Radeon в Linux/Ubuntu

// 31 Серпня, 2013 | 9540 переглядів

Узнать текущую нагрузку (GPU Load) видеокарты и её температуру (GPU Temperature) можно с помощью стандартной утилиты проприетарного драйвера ATI Radeon.

Достаточно выполнить следующую команду:

# aticonfig --odgc --odgt

Вывод будет следующим:

Default Adapter - AMD Radeon HD 6670
                            Core (MHz)    Memory (MHz)
           Current Clocks :    810           1000
             Current Peak :    810           1000
  Configurable Peak Range : [400-900]     [1000-1150]
                 GPU load :    0%

Default Adapter - AMD Radeon HD 6670
                  Sensor 0: Temperature - 35.50 C

Кстати, я уже писал о том как установить проприетарный драйвер видеокарты ATI Radeon в Ubuntu.

Как установить драйвер видеокарты ATI Radeon в Ubuntu 13.04

// 30 Серпня, 2013 | 24479 переглядів

Сегодня я расскажу как установить проприетарный драйвер от ATI на видеокарту ATI Radeon в Ubuntu 13.04.

Для начала нам необходимо скачать свежие драйвера с официального сайта.
Вот ссылка для ленивых: https://support.amd.com/us/gpudownload/Pages/index.aspx

Поскольку у меня система 64-битная, в последнем дропдауне я выбрал Linux x86_64.
В итоге нас отправили на страницу скачивания AMD Catalyst™ 13.4 Proprietary Linux x86 Display Driver.
Скачиваем и распаковываем ZIP-архив.

Ещё нам необходимо установить зависимые пакеты

# sudo apt-get install ia32-libs debhelper dh-modaliases execstack lib32gcc1 libc6-i386 dkms libqtgui4

А также нужно удалить пакет xserver-xorg-video-radeon, т.к. он будет “мешать”

# sudo apt-get remove --purge xserver-xorg-video-radeon

Мы готовы к инсталляции.
Устанавливаем права на выполнение скачанного нами RUN-файла

# chmod +x amd-driver-installer-catalyst-*.run

Запускаем процесс сборки DEB-пакетов fglrx

# sudo ./amd-driver-installer-catalyst-*.run --buildpkg Ubuntu/raring
# sudo dpkg -i fglrx*.deb

Если пакеты успешно установлены, далее нам необходимо сгенерировать новый /etc/X11/xorg.conf файл.

Запускаем его генерацию так:

# sudo aticonfig --initial -f

В случаe, если у вас две видеокарты, тогда вам ещё нужно сделать так
ВАЖНО! Не запускайте эту строчку, если у вас видеокарты в режиме CrossFire

# sudo aticonfig --initial -f --adapter=all

В случаe двух мониторов вам нужно сделать вот так:

# sudo aticonfig --initial -f
# sudo aticonfig --set-pcs-str="DDX,EnableRandR12,FALSE"

Указываем системе на изменения файла /etc/X11/xorg.conf явно. Это важная строчка, без которой система просто не будет знать о том, что вы изменили этот конфигурационный файл.

# sudo aticonfig --input=/etc/X11/xorg.conf --tls=1

Перезагружаемся уже с новыми конфигами.

# reboot

Если вы дошли до графической среды — скорее всего вы всё сделали правильно.
Проверим это с помощью информационной утилиты fglrxinfo.

# fglrxinfo

Ответ должен быть каким-то таким:

display: :0.0  screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon HD 7800 Series 
OpenGL version string: 4.2.12217 Compatibility Profile Context 12.104

Запустим простую утилиту для тестирования графической карты.

# fgl_glxgears

Её вывод в консоль у меня был следующим:

11916 frames in 5.0 seconds = 2383.200 FPS

Вот и всё.
Удачи.

Ubuntu: Как узнать температуру процессора, видеокарты и материнской платы

// 29 Серпня, 2013 | 119207 переглядів

Иногда необходимо узнать температуру процессора, видеокарты или материнской платы в данный момент. В Ubuntu/Linux это сделать довольно просто.

Итак, вначале установим пакет lm-sensors.
Делается это так

# sudo apt-get install lm-sensors

После чего утилите необходимо определить устройства чтобы корректно отображать температуру, напряжение CPU и скорость вращения кулеров.
Делается это тоже довольно просто. Запускаем sensors-detect так:

# sudo sensors-detect

Утилита будет просто засыпать вопросами, на которые нужно отвечать Enter’ом (что по-умолчанию будет означать — yes).
В самом конце утилита sensors-detect спросит о разрешении добавления необходимых для мониторинга модулей при загрузке системы (файл /etc/modules), на что необходимо будет ввести yes

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
w83627ehf
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!

Do you want to add these lines automatically to /etc/modules? (yes/NO) yes
Successful!

После чего необходимо перезагрузить ваш компьютер.

После перезагрузки вы можете с помощью команды sensors (обратите внимание что ей не требуется root-полномочия) получать необходимую информацию о температурах процессора, видеокарты и материнской платы, напряжение процессора и скорость вращения кулеров.

# sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +27.8°C  (crit = +99.0°C)
temp2:        +29.8°C  (crit = +99.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +34.0°C  (high = +80.0°C, crit = +98.0°C)
Core 0:         +34.0°C  (high = +80.0°C, crit = +98.0°C)
Core 1:         +29.0°C  (high = +80.0°C, crit = +98.0°C)
Core 2:         +33.0°C  (high = +80.0°C, crit = +98.0°C)
Core 3:         +33.0°C  (high = +80.0°C, crit = +98.0°C)

nct6776-isa-0290
Adapter: ISA adapter
Vcore:         +0.97 V  (min =  +0.00 V, max =  +1.74 V)
in1:           +1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
AVCC:          +3.39 V  (min =  +2.98 V, max =  +3.63 V)
+3.3V:         +3.39 V  (min =  +2.98 V, max =  +3.63 V)
in4:           +1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:           +2.04 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
3VSB:          +3.38 V  (min =  +2.98 V, max =  +3.63 V)
Vbat:          +3.31 V  (min =  +2.70 V, max =  +3.63 V)
fan1:            0 RPM  (min =    0 RPM)  ALARM
fan2:         1516 RPM  (min =    0 RPM)  ALARM
fan3:         1145 RPM  (min =    0 RPM)  ALARM
fan4:            0 RPM  (min =    0 RPM)  ALARM
fan5:            0 RPM  (min =    0 RPM)  ALARM
SYSTIN:        +29.0°C  (high =  +0.0°C, hyst =  +0.0°C)  ALARM  sensor = thermistor
CPUTIN:        -60.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = CPU diode
AUXTIN:        +28.5°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
PECI Agent 0:  +22.5°C  
cpu0_vid:     +0.000 V
intrusion0:   OK
intrusion1:   ALARM

radeon-pci-0100
Adapter: PCI adapter
temp1:        +43.5°C

В моём выводе программы sensors отображается температура каждого ядра процессора (их у меня 4), напряжения датчиков процессора, скорости вращения кулеров (2 из 5), температуру материнской платы (+29.0°C) и видеокарты (+43.5°C).

Вот и всё.
Удачи.

Загрузка правил iptables при активации сетевого интерфейса в Ubuntu/Debian

// 12 Серпня, 2013 | 16040 переглядів

Сегодня я расскажу как настроить firewall iptables на Ubuntu/Debian при поднятии (активации) сетевого интерфейса. Сами команды управления iptables описывать я не буду, т.к. этого в Сети вы найдёте море.
Читати далі…

Создаём SOCKS 5 прокси с помощью SSH-соединения через удалённый сервер в Linux

// 30 Липня, 2013 | 28142 переглядів

Cоздать SOCKS 5 прокси довольно просто. Достаточно выполнить команду по следующей схеме:

ssh -f -C2qTnN -D <порт> <удаленный_пользователь>@<удаленный_сервер>

Где
-f Запросит ssh перейти в фоновый режим только перед выполнением команды.
-C Включит сжатие всех данных (включая stdin, stdout, stderr и данные для перенаправленных Х11 и TCP/IP соединений).
-2 Принуждает ssh использовать только протокол версии 2.
-q Тихий режим. Подавляет все предупреждения и диагностические сообщения. Будут отображены только фатальные ошибки.
-T Отменить переназначение терминала.
-n Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода).
-N Не выполнять удаленную команду.
-D [локальный IP : ] порт
Читати далі…

Что будет если выполнить rm -Rf / в Линуксе?

// 10 Липня, 2013 | 12682 переглядів

Как известно, команда удаления всех данных рекурсивно вниз без задавания лишних вопросов для заданной папки в Линукс выглядит как rm -Rf .
И тут возникает вопрос:
“А что будет если такой папкой будет корневой каталог системы (/)?”
Читати далі…