adminaz

Простой WEB сервер на ubuntu, для Битрикс

Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких nginx и прочего, для высоконагруженных проектов конечно не пойдет, но "просто сайт" вполне полетит. Итак после установки на ноутбук Sumsung P29 (ему вот уже 9 лет) с конфигурацией Celeron M- 1.4 Ghz, 700 Мб. оперативной памяти, жесткий IDE на 40 гигов, словом тот еще драндулет- установка Битрикс: Малый Бизнес 12, решение интернет магазин выдает 52 балла производительности, все параметры самую капельку выше эталона.

ИТАК УСТАНАВЛИВЕМ ОСНОВУ

Устанавливаем Apache

sudo apt-get install apache2 

Установка PHP и библиотеки для работы с графикой:

apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby

Чтобы Apache подхватил только что установленный PHP перезагрузим его командой:

sudo apache2ctl restart

Установка MySQL

sudo apt-get install mysql-server

 

в процессе установки попросит ввести пароль, придумайте самостоятельно

Установка PhpMyAdmin

sudo apt-get install phpmyadmin

 

в процессе запросит пароль от MYSQL - тот самый что вводили выше. Все основа готова, на этом вполне заработает сайт.

ЗАПИЛИВАЕМ ПОД БИТРИКС

Для повышения производительности, да и вообще по требованиям Битрикс к серверу, на нем должен быть установлен APC (на самом деле не только он подходит, можно поставить eAccelerator, XChache и.т.д) 

Устанавливаем оной вводя команды по одной (хотя наверное можно и хором)

sudo apt-get install php-pear 
sudo apt-get install php5-dev apache2-prefork-dev build-essential 
sudo pecl install apc

ДАЛЬШЕ СОЗДАЕМ И ОТКРЫВАЕМ ФАЙЛ НАСТРОЕК APC

nano /etc/php5/conf.d/apc.ini

прямо туда копируем вот это

extension=apc.so 
realpath_cache_size=4096k 
apc.ttl=1 
apc.max_file_size=4M 
apc.shm_size=128M //вот тут достаточно и 96М, но я предпочитаю 128 

ТЕПЕРЬ УСКОРИМ РАБОТУ MYSQL

открываем

nano /etc/mysql/my.cnf

и добавляем в него (можно куда-нибудь в середину)

innodb_flush_log_at_trx_commit = 0 
innodb_buffer_pool_size = 128M 
innodb_flush_method = O_DIRECT 
transaction-isolation = READ-COMMITTED 
table_open_cache = 600 //тут самостоятельно

ну вот и все, остально, например php.ini уже докручивайте на свое усмотрение, с этими настройками Битрикс вполне летает на компе средней паршивости

Дополнение с демагогией - установка memcache на ubuntu server с битрикс сайтом, для ускорения (под высоконагруженные проекты, для всякой мелочевки не стоит заморачиваться)

PS: УСТАНОВКА WEBMIN НА UBUNTU. ЧТО БЫ БЫЛО ПРОЩЕ:

Добавляем необходимые пакеты

apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions

Скачиваем ключи

wget http://www.webmin.com/jcameron-key.asc

Добавляем их

apt-key add jcameron-key.asc

Добавляем в самый конец sources.list

nano /etc/apt/sources.list 

deb http://download.webmin.com/download/repository sarge contrib

Скачиваем ключи

wget http://www.webmin.com/jcameron-key.asc

Обнавляемся и устанавливаем webmin

sudo apt-get update 

sudo apt-get install webmin

Дожидаемся конца установки и после WEBMIN доступен по адресу

https://ВАШ_IP:10000

И ЕЩЕ ОДНА МАЛЕНЬКАЯ ВЕЩЬ

Лично я держу пару таких серверов на домашнем компьютере. То есть на однй, достаточно мощной машине установлено 5 виртуальных машин с простенькими параметрами. Так у меня роутер, и виртуальные машины получают IP адреса по DHCP. необходимо задать им статичные IP адреса. По большей сути это актуально и для еденичного компьютера в домашней сети

Идем в nano /etc/network/interfaces и приводим к виду:

# This file describes the network interfaces available on your system 
# and how to activate them. For more information, see interfaces(5). 

# The loopback network interface 
auto lo 
iface lo inet loopback 

# The primary network interface 
auto eth0 
iface eth0 inet static 
address 192.168.0.58 //Здесь указываем свой желаемый IP 
netmask 255.255.255.0

Перезагружаем сеть /etc/init.d/networking restart и идем в nano /etc/hosts Приводим его примерно к такому виду:

1127.0.0.1 localhost.localdomain localhost192.168.0.58 server.example.com server //повторяем свой IP и адрес 

# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters

Выполняем:

echo server.example.com > /etc/hostname 
/etc/init.d/hostname restart

B проверяем:

hostname 
hostname -f

Теперь они должны показать server.example.com.

Ускорение сайта Битрикс на ubuntu server, Memcached.

Что такое memcacheed- наверное знает каждый, но на всякий повторюсь. Это алгоритм кэширования различных объектов в оперативной памяти. Позволяет, используя специальное API (для Perl, PHP, Python, Java и др.), сохранить в ОЗУ блок данных, сопоставленный с определённым символьным ключом. Был разработан для сайта LiveJournal, имеющего более миллиона посетителей в сутки. Его применение снизило загрузку серверов баз данных в разы. В API memcached есть только базовые функции: выбор сервера, установка и разрыв соединения, добавление, удаление, обновление и получение объекта. Для каждого объекта устанавливается время жизни от 1 секунды до бесконечности. При переполнении памяти более старые объекты автоматически удаляются.

Говоря по-простому, memcacheed хранит в оперативной памяти готовые ответы базы данных, тем самым снижая с нее нагрузку и ускоряя скорость ответа на запрос пользователя.

ЗАЧЕМ МНЕ MEMCACHE

Собственно база данных да и посещаемость моего сайта не большие, и он вполне себе летает на простом веб сервере, собранном по вот этой инструкции. Однако, захотелось попробовать поработать с этим видом кеширования, да и обстоятельства подвернулись удачные.

Последние четыре месяца сайт работал на виртуальном сервере, арендованном у keyweb.ru, в принципе, нареканий никаких и обращаться в техподдержку не приходилось. Но количество сайтов на сервере растет, нагрузка на виртуалку повышается, начал задумываться о приобретении аренды на выделенный сервер там же, на keyweb-е. Однако, обстоятельства подкачали, неделю назад сервер неожиданно потух. Практически незамедлительно написал в техподдержку очень развернутый вопрос, ответом получил короткое "Посмотрим" и тишина на час. "Нафиг, нафиг" - подумал я и начал мониторить другие компании.

В итоге, сегодня приобрел на пробу полноценный сервер: AMD Athlon 64 X 3500, 8 Гб ОЗУ, 320 Гб RAID и безлимитный трафик на 1Гб/с. Для пробы, да в принципе и вообще на первое время- пойдет под пяток не высоконагруженных сайтов. Все это за 36 Евро, на что надеются Российские хостинг компании с маленькими дисками, маленькой ОЗУ и ограниченным трафиком за минимум 3000 руб. не знаю, но раз дерут значит есть с кого.

Ух, высказался, теперь самое главное:

УСТАНОВКА MEMCACHE НА UBUNTU SERVER ДЛЯ БИТРИКС

Для начала поднимаем просто WEB сервер и запиливаем под Битрикс, ссылку на инструкцию дал выше. Дальше:

Устанавливаем memcached:

apt-get install memcached  

Идем в настройки memcached nano /etc/memcached.conf и приводим к такому виду:

#Memcached будет работать, как демон 
-d 
#Лог будет складывать туда 
logfile /var/log/memcached.log 
#Для начала поставьте 256 мегабайт ОЗУ под хранилище. Но больше заисит от ее колличества 
#помните, что выставив 256 Вы ровно столько забираете от оперативки 
#лично у меня на данный момент стоит 512 
-m 256 
#Слушать будет этот порт 
-p 11211 
#Пользователь 
-u nobody 
#Слушаем localhost 
-l 127.0.0.1

Перезапускаем memcached:

/etc/init.d/memcached restart

Устанавливаем модуль для PHP:

apt-get install php5-dev libmemcache-dev 

pecl download memcache 
tar xzvf memcache-2.2.7.tgz //nen здесь внимательно, я послежу но смотрите на версию 2,2,7 крайняя 
cd memcache-2.2.7/ 
phpize && ./configure --enable-memcache && make 
cp modules/memcache.so /usr/lib/php5/20060613/ //тут тоже обратите внимание на цифры у себя 

echo 'extension=memcache.so' >> /etc/php5/apache2/php.ini 
/etc/init.d/apache2 restart

Собственно все, установлено и настроено. Запускаем битрикс сайт на сервере, и идем папку/bitrix/php_interface и открываем файл dbconn.php

В него вносим следующее:

define("BX_CACHE_TYPE", "memcache"); //устанавливаем тип кеширования 
define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01"); //это не даст кешам разных сайтов перемешаться 
define("BX_MEMCACHE_HOST", "127.0.0.1"); //это адрес где работает мемкешед (в нашем случае локально)

Собственно совсем все. Таким образом, я запустил на сервере 8 сайтов на битрикс, один из них неплохо посещаемый интернет магазин с каталогом на 30 тыс. позиций. Погоняю месяцок и отпишусь в этой теме...как оно хреново или не очень)) Успехов.

PS: В новой 14-ой версии 1С битрикс настройки перенесены в файл /bitrix/.settings.php и тип кеширование необходимо устанавливать в секции:

'cache' => 
array ( 
'value' => 
array ( 
'sid' => '$_SERVER["DOCUMENT_ROOT"]."#01"', 
'type' => 'memcache', 
'memcache' => 
array ( 
'host' => '127.0.0.1', 
), 
), 
'readonly' => false, 
),

Дополнительно можете установить nginx чтобы совсем летало.

Установка nginx на ubuntu server с битрикс сайтом

nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, а также почтовый прокси-сервер, написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как:  Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике, Netcraft nginx обслуживал или проксировал 13.54% самых нагруженных сайтов в мае 2013 года.

Говоря по-простому, nginx это веб сервер, который менее требователен к ресурсам машины. Имеет смысл использовать на слабых серверах либо на высоконагруженных проектах. Наиболее оптимальный вариант конфигурации, по моему мнению, это работа nginx в связке с apache. В таком варианте nginx выступает прослойкой между пользователем и apache, отдавая всю статику и обработанные apache запросы. Таким образом ускоряется ответ на запрос и освобождаются ресурсы занятые apache, так как ему нужно будет обрабатывать только запросы nginx-а.

 

 

УСТАНОВКА NGINX НА РАБОТАЮЩИЙ СЕРВЕР С APACHE.

Итак имеем работающий WEB-сервер: собранный вот по этим инсрукциям:

Нам необходимо ко всему этому добру прикрутить nginx, таким образом чтобы он отдавал всю статику и делал запросы к apache для получения динамики.

Во первых устанавливаем nginx командой:

sudo aptitude install nginx

Далее редактируем все файлы виртуальных хостов созданных в apache, собственно меняем прослушиваемый порт с 80 на 81. Пример одного из файлов:

<VirtualHost *:81> 
ServerName адрес_сайта 
ServerAdmin ящик_админа 
DocumentRoot /путь_к_файлам_сайта 
<Directory/путь_к_файлам_сайта> 
Options FollowSymLinks 
AllowOverride None 
</Directory> 
<Directory /var/mysitesdocs/polimer_m> 
Options Indexes FollowSymLinks MultiViews 
AllowOverride All 
Order allow,deny 
allow from all 
</Directory> 
ErrorLog /var/log/apache2/error.log 
LogLevel debug 
CustomLog /var/log/apache2/access.log combined 
</VirtualHost>

Далее редактируем файл nano /etc/apache2/ports.conf

NameVirtualHost *:81 
Listen 81

Устанавливаем apache2-mod-rpaf командой

aptitude install libapache2-mod-rpaf

Открываем файл конфигурации nginx и настраивам под себя (рекомендации и подсказки внутри):nano /etc/nginx/nginx.conf

user www-data; 
worker_processes 2; 
#выставляем по колличеству ядер процессора 
timer_resolution 100ms; 
error_log /var/log/nginx/error.log; 
pid /var/run/nginx.pid; 

events { 
worker_connections 1024; 
} 

http { 
include /etc/nginx/mime.types; 
default_type application/octet-stream; 
server_names_hash_bucket_size 64; 
access_log /var/log/nginx/access.log; 

sendfile on; 
#tcp_nopush on; 

#keepalive_timeout 0; 
keepalive_timeout 65; 
tcp_nodelay on; 

gzip on; 
gzip_proxied any; 
gzip_min_length 1100; 
gzip_http_version 1.0; 
gzip_buffers 4 8k; 
gzip_comp_level 5; 
#рекомендую оставить 5, больше бестолково, меньше не эффективно 
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*; 
} 

Создаем виртуальный хост в nginx nano /etc/nginx/sites-enabled/домен_сайта

server { 
listen 80; 
server_name домен_сайта; 
access_log /var/log/nginx.access_log; 
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /путь_к_сайту/; 
index index.html index.php; 
access_log off; 
expires 30d; 
} 
location ~ /\.ht { 
deny all; 
} 
location / { 
proxy_pass http://127.0.0.1:81/; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-for $remote_addr; 
proxy_set_header Host $host; 
proxy_connect_timeout 60; 
proxy_send_timeout 90; 
proxy_read_timeout 90; 
proxy_redirect off; 
proxy_set_header Connection close; 
proxy_pass_header Content-Type; 
proxy_pass_header Content-Disposition; 
proxy_pass_header Content-Length; 
} 

Перезапускаем nginx /etc/init.d/nginx restart 
и апач sudo /etc/init.d/apache2 reload

ИЗМЕНЕНИЕ ПРАВ НА ПАПКИ И ФАЙЛЫ САЙТА(ОВ)

Для безопасности имеет смысл выставить права на файлы всех сайтов равными 644, а на папки 755. При этом владельцем должен стать пользователь от имени которого работает apache, а именно www-data. Предположим что вы положили все сайты в папку /var/www - тогда необходимо выполнить следующие команды

find /var/www -type f -exec chmod 644 {} \; 

find /var/www -type d -exec chmod 755 {} \;

chown -R www-data:www-data /var/www

Основные функции вывода в шаблонах Битрикс

В ОСНОВНОМ ШАБЛОНЕ:

<?$APPLICATION->ShowTitle()?> - собственно вывод тайтла в основном шаблоне сайта

<?$APPLICATION->ShowHead()?> - подключение для вывода в шаблоне сайта основных полей тега : мета-теги Content-Type, robots, keywords, description; стили CSS; скрипты

<?$APPLICATION->ShowPanel();?> - выводит панель управления администратора

<?=SITE_TEMPLATE_PATH?> - подставляет путь к шаблону

<?$APPLICATION->ShowTitle(false);?> - заголовок (в h1 например использовать)

SHOWHEAD РАЗБИТЬ НА СОСТАВЛЯЮЩИЕ:

<meta http-equiv="Content-Type" content="text/html; charset=<?=LANG_CHARSET;?>" /> - Установка кодировки сайта

<? $APPLICATION->ShowMeta("keywords") ?> - Вывод мета тега keywords

<? $APPLICATION->ShowMeta("description") ?> - Вывод мета тега description

<? $APPLICATION->ShowCSS(); ?> - Подключение основных файлов стилей template_styles.css и styles.css

<? $APPLICATION->ShowHeadStrings() ?> - Отображает специальные стили, JavaScript

<? $APPLICATION->ShowHeadScripts() ?> - Вывода служебных скриптов

 

В ШАБЛОНАХ КОМПОНЕНТОВ:

<img src="<?=$arSection["PICTURE"]["SRC"]?>" title="<?=$arSection["NAME"]?>" border="0"/> - картинка раздела инфоблока.

<?=$arSection["DESCRIPTION"]?> - описание раздела инфоблока

<?echo $arItem["NAME"]?> - название

<?echo $arItem["DETAIL_PAGE_URL"]?> - ссылка на детальную новость (статью)

<?echo $arItem["PREVIEW_TEXT"];?> - текст анонса

<?echo $arResult["DETAIL_TEXT"];?> - детальный текст

<?=$arItem["PREVIEW_PICTURE"]["SRC"]?> - изображение анонса

<?=$arItem["DETAIL_PICTURE"]["SRC"]?> - изображение детальное

<?=$arResult['DISPLAY_ACTIVE_FROM']?> - дата начала активности

ПОЛЕЗНЫЕ УСЛОВИЯ

Если картинки нет- то вывести "нет картинки"

<?if (strlen($arItem["DETAIL_PICTURE"]["SRC"])>0):?> 
      <img src="<?=$arItem["DETAIL_PICTURE"]["SRC"]?>"/> 
<?else:?> 
       нет картинки 
<?endif?>

Включаемая область в режиме php.

<? 
        $APPLICATION->IncludeFile( 
        SITE_DIR."include/flash.php", 
        Array(), 
        Array("MODE"=>"php") 
       ); 
?>

Количество товара на складе:

<? 
          $ar_res = CCatalogProduct::GetByID($arElement['ID']); 
          echo "<br>На складе: "; 
          print_r($ar_res['QUANTITY']); 
          echo " шт."; 
?>

Вывести название раздела внутри элемента. Например в детальной новости, указать к какому из разделов она относится:

 <?echo $arResult["SECTION"]["PATH"][0]["NAME"]?>

Вывести меню нужного типа в шаблоне битрикс

 <? 
$APPLICATION->IncludeComponent("bitrix:menu", "top_menu", array( 
"ROOT_MENU_TYPE" => "top",  
//В данном случаее меню типа top 
"MENU_CACHE_TYPE" => "A", 
"MENU_CACHE_TIME" => "3600", 
"MENU_CACHE_USE_GROUPS" => "Y", 
"MENU_CACHE_GET_VARS" => array( 
), 
"MAX_LEVEL" => "1", 
"CHILD_MENU_TYPE" => "left", 
"USE_EXT" => "N", 
"DELAY" => "N", 
"ALLOW_MULTI_SELECT" => "N" 
), 
false 
); 
?>

Подключение веб мессенджера в шаблоне сайта

<?$APPLICATION->IncludeComponent("bitrix:im.messenger", "", Array(), null, array("HIDE_ICONS" => "N"));?>

Вывести текст описания свойства инфоблока. Например, в форме добавления/редактирования элемента инфоблока для пользователей:

<?=$arResult["PROPERTY_LIST_FULL"][$propertyID]["HINT"]?>

Вывести текущую дату из установленной на сервере

<? echo date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()); ?>

Пример повышения ставки центробанка Венгрия, шоковая терапия.

Венгрия

 

Когда повысили ставку: 22 октября 2008 года

Размер повышения: с 8,5 до 11,5%

 

 

Обстоятельства: Венгрия присоединилась к Евросоюзу в 2004 году и считалась одной из наиболее быстро адаптировавшихся к рыночной экономике стран Восточной Европы. Но несмотря на интенсивный рост производства, в 2006 году страна столкнулась с рецессией, а в 2008 году – с валютным кризисом. Экономика Венгрии была уязвима из-за высокого внешнего долга, который составлял 90% от ВВП. К тому же частный сектор активно кредитовался в иностранной валюте – в евро или швейцарских франках.

Еще 20 октября 2008 года глава Центрального банка Венгрии уверял, что банковской системе страны не грозит кризис, и призвал не сравнивать Венгрию с Исландией (которая одновременно с этим терпела финансовое бедствие). Но венгерская валюта форинт продолжила падение, доверие к банкам со стороны населения было подорвано. К моменту решения о повышении ставки форинт обесценился к евро на 16% с начала октября.

 

Что было после:

Через несколько дней после решения ЦБ о повышении ставки МВФ и венгерское правительство согласовали кредит в размере $15,7 млрд, еще $8,4 млрд обещал выделить Евросоюз и $1,3 млрд – Всемирный банк. Стабилизационная программа была направлена на консолидацию бюджета через сокращение зарплат госслужащим и пенсий. В банковском секторе была проведена рекапитализация.

Но обесценение национальной валюты и политика урезания расходов под эгидой МВФ подтолкнули Венгрию к глубокому экономическому спаду. Реальный ВВП упал на 6,7% в годовом исчислении в первом квартале 2009 года, уровень безработицы вырос с 2,2 до 9,9%, а инфляция к маю достигла 3,8%. Центробанк Венгрии принял решение немного сократить ключевую ставку (до 11%) уже через месяц после неожиданного ее повышения и продолжал ее постепенно снижать – задача оживления экономической активности вышла на первый план. Форинт же продолжил падение и в марте 2009 года достиг исторического минимума на уровне 317 за евро.

 

 

Банк России в ночь на 16 декабря повысил ключевую ставку сразу на 6,5 п.п. – до 17%. Это ее крупнейшее повышение с кризисного 1998 года. В сумме за этот год ключевая ставка повышена уже на 11,5 пунктов. В результате сейчас по величине ставки Россия находится на седьмом месте в мире, обгоняя Афганистан с Йеменом (по 15%), но уступая Венесуэле с ее 18,39%.

 

Центробанки идут на увеличение учетной ставки, чтобы поддержать курс национальной валюты и/или обуздать инфляцию. В случае с Банком России повышение ставки пока не привело к укреплению рубля: после вчерашнего падения более чем на 10% сегодня курс евро в ходе торгов на Московской бирже вырос до рекордных 100 руб., а доллара – до 81 руб.

 

До России центробанки разных стран неоднократно прибегали к экстренному повышению ставок.

Битрикс - тюнинг БД для импорта товаров

Для импорта данных из файла в формате CommerceML2, База данных 1С-Битрикса не оптимизирована должным образом.
Поэтому при объёме каталога товаров от 1000 товаров обновление сайта занимает довольно продолжительное время.
Для ускорения обновления сайта необходимо для таблиц создать индексные файлы.

Ниже код SQL который необходимо выполнить:

 

ALTER TABLE `b_iblock_element` ADD INDEX ( `XML_ID` );
ALTER TABLE `b_iblock_element` ADD INDEX ( `IBLOCK_ID` );
ALTER TABLE `b_iblock_element` ADD INDEX ( `ACTIVE` );
ALTER TABLE `b_iblock_element` ADD INDEX ( `SORT` ); 
ALTER TABLE `b_iblock_element` ADD INDEX ( `WF_STATUS_ID` ); 
ALTER TABLE `b_iblock_element` ADD INDEX ( `IN_SECTIONS` ); 
ALTER TABLE `b_iblock_element` ADD INDEX ( `TMP_ID` ); 
ALTER TABLE `b_iblock_element_property` ADD INDEX ( `IBLOCK_ELEMENT_ID` ); 
ALTER TABLE `b_iblock_element_property` ADD INDEX ( `VALUE_TYPE` ); 
ALTER TABLE `b_iblock_element_property` ADD INDEX ( `VALUE_ENUM` ); 
ALTER TABLE `b_iblock_element_property` ADD INDEX ( `VALUE_NUM` ); 
ALTER TABLE `b_catalog_price` ADD INDEX ( `PRODUCT_ID` ); 
ALTER TABLE `b_catalog_price` ADD INDEX ( `EXTRA_ID` ); 
ALTER TABLE `b_catalog_price` ADD INDEX ( `PRICE` ); 
ALTER TABLE `b_catalog_price` ADD INDEX ( `TMP_ID` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `CODE` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `XML_ID` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `TMP_ID` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `ACTIVE` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `GLOBAL_ACTIVE` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `IBLOCK_ID` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `IBLOCK_SECTION_ID` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `LEFT_MARGIN` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `RIGHT_MARGIN` ); 
ALTER TABLE `b_iblock_section` ADD INDEX ( `DEPTH_LEVEL` );
ALTER TABLE `b_iblock_section` ADD INDEX ( `DESCRIPTION_TYPE` );

 

 

Для обновления сайта 1000 товарами требовалось 5 минут, после создания индексов сайт обновляется за 1 минуту, берегите своё время, а мы поможем вам в этом

Bitrix - Функция для получения дочерних категорий по идентификатору родительской категории.

Функция для  получения дочерних категорий по идентификатору родительской категории.


        function getChildCat($id)
        {
            global $db,$CONFIG, $tpl, $result, $ni;
            $sql = "SELECT * FROM `categories` WHERE `parent_id` = ".$id;
            $db->query($sql);
            $preresult = array();
            $ni++;
            while ($db->next_record())
            {
                $preresult[] = array("id" => $db->f('id'), "title" => $db->f('title'), "level"=> $ni);
            }

            foreach ($preresult as $results)
            {
                $ni = $results['level'];
                $result[] = $results;
                $this->getChildCat($results['id']);
            }

            return $result;
        }